(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git commit'>)}
          spids: [20]
        )
      ]
      spids: [20]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name '$TEST_DIRECTORY') (/diff-lib.sh))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:author)
          op: Equal
          rhs: {(SQ <'The Real Author <someguy@his.email.org>'>)}
          spids: [37]
        )
      ]
      spids: [37]
    )
    (C {(test_tick)})
    (C {(test_expect_success)} {(SQ <'initial status'>)} 
      {
        (SQ <'\n'> <'\techo bongo bongo >file &&\n'> <'\tgit add file &&\n'> 
          <'\tgit status >actual &&\n'> <'\ttest_i18ngrep "Initial commit" actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'fail initial amend'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit --amend\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'setup: initial commit'>)} 
      {(SQ <'\n'> <'\tgit commit -m initial\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'-m and -F do not mix'>)} 
      {
        (SQ <'\n'> <'\tgit checkout HEAD file && echo >>file && git add file &&\n'> 
          <'\ttest_must_fail git commit -m foo -m bar -F file\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'-m and -C do not mix'>)} 
      {
        (SQ <'\n'> <'\tgit checkout HEAD file && echo >>file && git add file &&\n'> 
          <'\ttest_must_fail git commit -C HEAD -m illegal\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'paths and -a do not mix'>)} 
      {
        (SQ <'\n'> <'\techo King of the bongo >file &&\n'> 
          <'\ttest_must_fail git commit -m foo -a file\n'>
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} {(SQ <'can use paths with --interactive'>)} 
      {
        (SQ <'\n'> <'\techo bong-o-bong >file &&\n'> 
          <'\t# 2: update, 1:st path, that is all, 7: quit\n'> <'\t( echo 2; echo 1; echo; echo 7 ) |\n'> <'\tgit commit -m foo --interactive file &&\n'> 
          <'\tgit reset --hard HEAD^\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using invalid commit with -C'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit --allow-empty -C bogus\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'nothing to commit'>)} 
      {(SQ <'\n'> <'\tgit reset --hard &&\n'> <'\ttest_must_fail git commit -m initial\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--dry-run fails with nothing to commit'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit -m initial --dry-run\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--short fails with nothing to commit'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit -m initial --short\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--porcelain fails with nothing to commit'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit -m initial --porcelain\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--long fails with nothing to commit'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit -m initial --long\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'setup: non-initial commit'>)} 
      {(SQ <'\n'> <'\techo bongo bongo bongo >file &&\n'> <'\tgit commit -m next -a\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'--dry-run with stuff to commit returns ok'>)} 
      {(SQ <'\n'> <'\techo bongo bongo bongo >>file &&\n'> <'\tgit commit -m next -a --dry-run\n'>)}
    )
    (C {(test_expect_failure)} {(SQ <'--short with stuff to commit returns ok'>)} 
      {(SQ <'\n'> <'\techo bongo bongo bongo >>file &&\n'> <'\tgit commit -m next -a --short\n'>)}
    )
    (C {(test_expect_failure)} {(SQ <'--porcelain with stuff to commit returns ok'>)} 
      {
        (SQ <'\n'> <'\techo bongo bongo bongo >>file &&\n'> <'\tgit commit -m next -a --porcelain\n'>)
      }
    )
    (C {(test_expect_success)} {(SQ <'--long with stuff to commit returns ok'>)} 
      {(SQ <'\n'> <'\techo bongo bongo bongo >>file &&\n'> <'\tgit commit -m next -a --long\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'commit message from non-existing file'>)} 
      {
        (SQ <'\n'> <'\techo more bongo: bongo bongo bongo bongo >file &&\n'> 
          <'\ttest_must_fail git commit -F gah -a\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'empty commit message'>)} 
      {
        (SQ <'\n'> <'\t# Empty except stray tabs and spaces on a few lines.\n'> 
          <'\tsed -e "s/@//g" >msg <<-\\EOF &&\n'> <'\t\t@\t\t@\n'> <'\t\t@@\n'> <'\t\t@  @\n'> <'\t\t@Signed-off-by: hula@\n'> <'\tEOF\n'> 
          <'\ttest_must_fail git commit -F msg -a\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'template "emptyness" check does not kick in with -F'>)} 
      {
        (SQ <'\n'> <'\tgit checkout HEAD file && echo >>file && git add file &&\n'> 
          <'\tgit commit -t file -F file\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'template "emptyness" check'>)} 
      {
        (SQ <'\n'> <'\tgit checkout HEAD file && echo >>file && git add file &&\n'> 
          <'\ttest_must_fail git commit -t file 2>err &&\n'> <'\ttest_i18ngrep "did not edit" err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup: commit message from file'>)} 
      {
        (SQ <'\n'> <'\tgit checkout HEAD file && echo >>file && git add file &&\n'> 
          <'\techo this is the commit message, coming from a file >msg &&\n'> <'\tgit commit -F msg -a\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend commit'>)} 
      {
        (SQ <'\n'> <'\tcat >editor <<-\\EOF &&\n'> <'\t#!/bin/sh\n'> 
          <'\tsed -e "s/a file/an amend commit/g" < "$1" > "$1-"\n'> <'\tmv "$1-" "$1"\n'> <'\tEOF\n'> <'\tchmod 755 editor &&\n'> <'\tEDITOR=./editor git commit --amend\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend --only ignores staged contents'>)} 
      {
        (SQ <'\n'> <'\tcp file file.expect &&\n'> <'\techo changed >file &&\n'> <'\tgit add file &&\n'> 
          <'\tgit commit --no-edit --amend --only &&\n'> <'\tgit cat-file blob HEAD:file >file.actual &&\n'> <'\ttest_cmp file.expect file.actual &&\n'> 
          <'\tgit diff --exit-code\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'set up editor'>)} 
      {
        (SQ <'\n'> <'\tcat >editor <<-\\EOF &&\n'> <'\t#!/bin/sh\n'> 
          <'\tsed -e "s/unamended/amended/g" <"$1" >"$1-"\n'> <'\tmv "$1-" "$1"\n'> <'\tEOF\n'> <'\tchmod 755 editor\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend without launching editor'>)} 
      {
        (SQ <'\n'> <'\techo unamended >expect &&\n'> <'\tgit commit --allow-empty -m "unamended" &&\n'> 
          <'\techo needs more bongo >file &&\n'> <'\tgit add file &&\n'> <'\tEDITOR=./editor git commit --no-edit --amend &&\n'> 
          <'\tgit diff --exit-code HEAD -- file &&\n'> <'\tgit diff-tree -s --format=%s HEAD >msg &&\n'> <'\ttest_cmp expect msg\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--amend --edit'>)} 
      {
        (SQ <'\n'> <'\techo amended >expect &&\n'> <'\tgit commit --allow-empty -m "unamended" &&\n'> 
          <'\techo bongo again >file &&\n'> <'\tgit add file &&\n'> <'\tEDITOR=./editor git commit --edit --amend &&\n'> 
          <'\tgit diff-tree -s --format=%s HEAD >msg &&\n'> <'\ttest_cmp expect msg\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--amend --edit of empty message'>)} 
      {
        (SQ <'\n'> <'\tcat >replace <<-\\EOF &&\n'> <'\t#!/bin/sh\n'> <'\techo "amended" >"$1"\n'> 
          <'\tEOF\n'> <'\tchmod 755 replace &&\n'> <'\tgit commit --allow-empty --allow-empty-message -m "" &&\n'> 
          <'\techo more bongo >file &&\n'> <'\tgit add file &&\n'> <'\tEDITOR=./replace git commit --edit --amend &&\n'> 
          <'\tgit diff-tree -s --format=%s HEAD >msg &&\n'> <'\t./replace expect &&\n'> <'\ttest_cmp expect msg\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--amend to set message to empty'>)} 
      {
        (SQ <'\n'> <'\techo bata >file &&\n'> <'\tgit add file &&\n'> 
          <'\tgit commit -m "unamended" &&\n'> <'\tgit commit --amend --allow-empty-message -m "" &&\n'> 
          <'\tgit diff-tree -s --format=%s HEAD >msg &&\n'> <'\techo "" >expect &&\n'> <'\ttest_cmp expect msg\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--amend to set empty message needs --allow-empty-message'>)} 
      {
        (SQ <'\n'> <'\techo conga >file &&\n'> <'\tgit add file &&\n'> 
          <'\tgit commit -m "unamended" &&\n'> <'\ttest_must_fail git commit --amend -m "" &&\n'> <'\tgit diff-tree -s --format=%s HEAD >msg &&\n'> 
          <'\techo "unamended" >expect &&\n'> <'\ttest_cmp expect msg\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'-m --edit'>)} 
      {
        (SQ <'\n'> <'\techo amended >expect &&\n'> <'\tgit commit --allow-empty -m buffer &&\n'> 
          <'\techo bongo bongo >file &&\n'> <'\tgit add file &&\n'> <'\tEDITOR=./editor git commit -m unamended --edit &&\n'> 
          <'\tgit diff-tree -s  --format=%s HEAD >msg &&\n'> <'\ttest_cmp expect msg\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'-m and -F do not mix'>)} 
      {
        (SQ <'\n'> <'\techo enough with the bongos >file &&\n'> 
          <'\ttest_must_fail git commit -F msg -m amending .\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'using message from other commit'>)} 
      {(SQ <'\n'> <'\tgit commit -C HEAD^ .\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'editing message from other commit'>)} 
      {
        (SQ <'\n'> <'\tcat >editor <<-\\EOF &&\n'> <'\t#!/bin/sh\n'> 
          <'\tsed -e "s/amend/older/g"  < "$1" > "$1-"\n'> <'\tmv "$1-" "$1"\n'> <'\tEOF\n'> <'\tchmod 755 editor &&\n'> <'\techo hula hula >file &&\n'> 
          <'\tEDITOR=./editor git commit -c HEAD^ -a\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'message from stdin'>)} 
      {
        (SQ <'\n'> <'\techo silly new contents >file &&\n'> <'\techo commit message from stdin |\n'> 
          <'\tgit commit -F - -a\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'overriding author from command line'>)} 
      {
        (SQ <'\n'> <'\techo gak >file &&\n'> <'\tgit commit -m author \\\n'> 
          <'\t\t--author "Rubber Duck <rduck@convoy.org>" -a >output 2>&1 &&\n'> <'\tgrep Rubber.Duck output\n'>
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} {(SQ <'interactive add'>)} 
      {(SQ <'\n'> <'\techo 7 |\n'> <'\tgit commit --interactive |\n'> <'\tgrep "What now"\n'>)}
    )
    (C {(test_expect_success)} {(PERL)} 
      {(DQ ("commit --interactive doesn't change index if editor aborts"))} 
      {
        (SQ <'\n'> <'\techo zoo >file &&\n'> <'\ttest_must_fail git diff --exit-code >diff1 &&\n'> 
          <'\t(echo u ; echo "*" ; echo q) |\n'> <'\t(\n'> <'\t\tEDITOR=: &&\n'> <'\t\texport EDITOR &&\n'> 
          <'\t\ttest_must_fail git commit --interactive\n'> <'\t) &&\n'> <'\tgit diff >diff2 &&\n'> <'\tcompare_diff_patch diff1 diff2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'editor not invoked if -F is given'>)} 
      {
        (SQ <'\n'> <'\tcat >editor <<-\\EOF &&\n'> <'\t#!/bin/sh\n'> 
          <'\tsed -e s/good/bad/g <"$1" >"$1-"\n'> <'\tmv "$1-" "$1"\n'> <'\tEOF\n'> <'\tchmod 755 editor &&\n'> <'\n'> 
          <'\techo A good commit message. >msg &&\n'> <'\techo moo >file &&\n'> <'\n'> <'\tEDITOR=./editor git commit -a -F msg &&\n'> 
          <'\tgit show -s --pretty=format:%s >subject &&\n'> <'\tgrep -q good subject &&\n'> <'\n'> <'\techo quack >file &&\n'> <'\techo Another good message. |\n'> 
          <'\tEDITOR=./editor git commit -a -F - &&\n'> <'\tgit show -s --pretty=format:%s >subject &&\n'> <'\tgrep -q good subject\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'partial commit that involves removal (1)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit rm --cached file &&\n'> <'\tmv file elif &&\n'> <'\tgit add elif &&\n'> 
          <'\tgit commit -m "Partial: add elif" elif &&\n'> <'\tgit diff-tree --name-status HEAD^ HEAD >current &&\n'> <'\techo "A\telif" >expected &&\n'> 
          <'\ttest_cmp expected current\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'partial commit that involves removal (2)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit commit -m "Partial: remove file" file &&\n'> 
          <'\tgit diff-tree --name-status HEAD^ HEAD >current &&\n'> <'\techo "D\tfile" >expected &&\n'> <'\ttest_cmp expected current\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'partial commit that involves removal (3)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit rm --cached elif &&\n'> <'\techo elif >elif &&\n'> 
          <'\tgit commit -m "Partial: modify elif" elif &&\n'> <'\tgit diff-tree --name-status HEAD^ HEAD >current &&\n'> <'\techo "M\telif" >expected &&\n'> 
          <'\ttest_cmp expected current\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend commit to fix author'>)} 
      {
        (SQ <'\n'> <'\n'> <'\toldtick=$GIT_AUTHOR_DATE &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit reset --hard &&\n'> <'\tgit cat-file -p HEAD |\n'> <'\tsed -e "s/author.*/author $author $oldtick/" \\\n'> 
          <'\t\t-e "s/^\\(committer.*> \\).*$/\\1$GIT_COMMITTER_DATE/" > \\\n'> <'\t\texpected &&\n'> <'\tgit commit --amend --author="$author" &&\n'> 
          <'\tgit cat-file -p HEAD > current &&\n'> <'\ttest_cmp expected current\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend commit to fix date'>)} 
      {
        (SQ <'\n'> <'\n'> <'\ttest_tick &&\n'> <'\tnewtick=$GIT_AUTHOR_DATE &&\n'> 
          <'\tgit reset --hard &&\n'> <'\tgit cat-file -p HEAD |\n'> <'\tsed -e "s/author.*/author $author $newtick/" \\\n'> 
          <'\t\t-e "s/^\\(committer.*> \\).*$/\\1$GIT_COMMITTER_DATE/" > \\\n'> <'\t\texpected &&\n'> <'\tgit commit --amend --date="$newtick" &&\n'> 
          <'\tgit cat-file -p HEAD > current &&\n'> <'\ttest_cmp expected current\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit mentions forced date in output'>)} 
      {
        (SQ <'\n'> <'\tgit commit --amend --date=2010-01-02T03:04:05 >output &&\n'> 
          <'\tgrep "Date: *Sat Jan 2 03:04:05 2010" output\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit complains about completely bogus dates'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit --amend --date=seventeen\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'commit --date allows approxidate'>)} 
      {
        (SQ <'\n'> <'\tgit commit --amend \\\n'> 
          <'\t\t--date="midnight the 12th of october, anno domini 1979" &&\n'> <'\techo "Fri Oct 12 00:00:00 1979 +0000" >expect &&\n'> <'\tgit log -1 --format=%ad >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'sign off (1)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\techo 1 >positive &&\n'> <'\tgit add positive &&\n'> 
          <'\tgit commit -s -m "thank you" &&\n'> <'\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >actual &&\n'> <'\t(\n'> <'\t\techo thank you\n'> 
          <'\t\techo\n'> <'\t\tgit var GIT_COMMITTER_IDENT |\n'> <'\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n'> 
          <'\t) >expected &&\n'> <'\ttest_cmp expected actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'sign off (2)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\techo 2 >positive &&\n'> <'\tgit add positive &&\n'> 
          <'\texisting="Signed-off-by: Watch This <watchthis@example.com>" &&\n'> <'\tgit commit -s -m "thank you\n'> <'\n'> <'$existing" &&\n'> 
          <'\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >actual &&\n'> <'\t(\n'> <'\t\techo thank you\n'> <'\t\techo\n'> <'\t\techo $existing\n'> 
          <'\t\tgit var GIT_COMMITTER_IDENT |\n'> <'\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n'> <'\t) >expected &&\n'> 
          <'\ttest_cmp expected actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'signoff gap'>)} 
      {
        (SQ <'\n'> <'\n'> <'\techo 3 >positive &&\n'> <'\tgit add positive &&\n'> 
          <'\talt="Alt-RFC-822-Header: Value" &&\n'> <'\tgit commit -s -m "welcome\n'> <'\n'> <'$alt" &&\n'> 
          <'\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" > actual &&\n'> <'\t(\n'> <'\t\techo welcome\n'> <'\t\techo\n'> <'\t\techo $alt\n'> 
          <'\t\tgit var GIT_COMMITTER_IDENT |\n'> <'\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n'> <'\t) >expected &&\n'> 
          <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'signoff gap 2'>)} 
      {
        (SQ <'\n'> <'\n'> <'\techo 4 >positive &&\n'> <'\tgit add positive &&\n'> 
          <'\talt="fixed: 34" &&\n'> <'\tgit commit -s -m "welcome\n'> <'\n'> <'We have now\n'> <'$alt" &&\n'> 
          <'\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" > actual &&\n'> <'\t(\n'> <'\t\techo welcome\n'> <'\t\techo\n'> <'\t\techo We have now\n'> <'\t\techo $alt\n'> 
          <'\t\techo\n'> <'\t\tgit var GIT_COMMITTER_IDENT |\n'> <'\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n'> 
          <'\t) >expected &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'multiple -m'>)} 
      {
        (SQ <'\n'> <'\n'> <'\t>negative &&\n'> <'\tgit add negative &&\n'> 
          <'\tgit commit -m "one" -m "two" -m "three" &&\n'> <'\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >actual &&\n'> <'\t(\n'> <'\t\techo one\n'> 
          <'\t\techo\n'> <'\t\techo two\n'> <'\t\techo\n'> <'\t\techo three\n'> <'\t) >expected &&\n'> 
          <'\ttest_cmp expected actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend commit to fix author'>)} 
      {
        (SQ <'\n'> <'\n'> <'\toldtick=$GIT_AUTHOR_DATE &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit reset --hard &&\n'> <'\tgit cat-file -p HEAD |\n'> <'\tsed -e "s/author.*/author $author $oldtick/" \\\n'> 
          <'\t\t-e "s/^\\(committer.*> \\).*$/\\1$GIT_COMMITTER_DATE/" > \\\n'> <'\t\texpected &&\n'> <'\tgit commit --amend --author="$author" &&\n'> 
          <'\tgit cat-file -p HEAD > current &&\n'> <'\ttest_cmp expected current\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git commit <file> with dirty index'>)} 
      {
        (SQ <'\n'> <'\techo tacocat > elif &&\n'> <'\techo tehlulz > chz &&\n'> <'\tgit add chz &&\n'> 
          <'\tgit commit elif -m "tacocat is a palindrome" &&\n'> <'\tgit show --stat | grep elif &&\n'> <'\tgit diff --cached | grep chz\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'same tree (single parent)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\ttest_must_fail git commit -m empty\n'> <'\n'>)
      }
    )
    (C {(test_expect_success)} {(SQ <'same tree (single parent) --allow-empty'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit commit --allow-empty -m "forced empty" &&\n'> 
          <'\tgit cat-file commit HEAD | grep forced\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'same tree (merge and amend merge)'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit checkout -b side HEAD^ &&\n'> <'\techo zero >zero &&\n'> 
          <'\tgit add zero &&\n'> <'\tgit commit -m "add zero" &&\n'> <'\tgit checkout master &&\n'> <'\n'> 
          <'\tgit merge -s ours side -m "empty ok" &&\n'> <'\tgit diff HEAD^ HEAD >actual &&\n'> <'\t: >expected &&\n'> <'\ttest_cmp expected actual &&\n'> <'\n'> 
          <'\tgit commit --amend -m "empty really ok" &&\n'> <'\tgit diff HEAD^ HEAD >actual &&\n'> <'\t: >expected &&\n'> <'\ttest_cmp expected actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend using the message from another commit'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit --allow-empty -m "old commit" &&\n'> <'\told=$(git rev-parse --verify HEAD) &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit --allow-empty -m "new commit" &&\n'> <'\tnew=$(git rev-parse --verify HEAD) &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit --allow-empty --amend -C "$old" &&\n'> <'\tgit show --pretty="format:%ad %s" "$old" >expected &&\n'> 
          <'\tgit show --pretty="format:%ad %s" HEAD >actual &&\n'> <'\ttest_cmp expected actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend using the message from a commit named with tag'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit reset --hard &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit --allow-empty -m "old commit" &&\n'> <'\told=$(git rev-parse --verify HEAD) &&\n'> <'\tgit tag -a -m "tag on old" tagged-old HEAD &&\n'> 
          <'\ttest_tick &&\n'> <'\tgit commit --allow-empty -m "new commit" &&\n'> <'\tnew=$(git rev-parse --verify HEAD) &&\n'> 
          <'\ttest_tick &&\n'> <'\tgit commit --allow-empty --amend -C tagged-old &&\n'> 
          <'\tgit show --pretty="format:%ad %s" "$old" >expected &&\n'> <'\tgit show --pretty="format:%ad %s" HEAD >actual &&\n'> <'\ttest_cmp expected actual\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'amend can copy notes'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit config notes.rewrite.amend true &&\n'> 
          <'\tgit config notes.rewriteRef "refs/notes/*" &&\n'> <'\ttest_commit foo &&\n'> <'\tgit notes add -m"a note" &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit --amend -m"new foo" &&\n'> <'\ttest "$(git notes show)" = "a note"\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'commit a file whose name is a dash'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tfor i in 1 2 3 4 5\n'> <'\tdo\n'> <'\t\techo $i\n'> 
          <'\tdone >./- &&\n'> <'\tgit add ./- &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "add dash" >output </dev/null &&\n'> 
          <'\ttest_i18ngrep " changed, 5 insertions" output\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--only works on to-be-born branch'>)} 
      {
        (SQ <'\n'> <'\t# This test relies on having something in the index, as it\n'> 
          <'\t# would not otherwise actually prove much.  So check this.\n'> <'\ttest -n "$(git ls-files)" &&\n'> <'\tgit checkout --orphan orphan &&\n'> 
          <'\techo foo >newfile &&\n'> <'\tgit add newfile &&\n'> <'\tgit commit --only newfile -m"--only on unborn branch" &&\n'> 
          <'\techo newfile >expected &&\n'> <'\tgit ls-tree -r --name-only HEAD >actual &&\n'> <'\ttest_cmp expected actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--dry-run with conflicts fixed from a merge'>)} 
      {
        (SQ <'\n'> <'\t# setup two branches with conflicting information\n'> 
          <'\t# in the same file, resolve the conflict,\n'> <'\t# call commit with --dry-run\n'> <'\techo "Initial contents, unimportant" >test-file &&\n'> 
          <'\tgit add test-file &&\n'> <'\tgit commit -m "Initial commit" &&\n'> <'\techo "commit-1-state" >test-file &&\n'> 
          <'\tgit commit -m "commit 1" -i test-file &&\n'> <'\tgit tag commit-1 &&\n'> <'\tgit checkout -b branch-2 HEAD^1 &&\n'> 
          <'\techo "commit-2-state" >test-file &&\n'> <'\tgit commit -m "commit 2" -i test-file &&\n'> <'\t! $(git merge --no-commit commit-1) &&\n'> 
          <'\techo "commit-2-state" >test-file &&\n'> <'\tgit add test-file &&\n'> <'\tgit commit --dry-run &&\n'> 
          <'\tgit commit -m "conflicts fixed from merge."\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)