(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'git commit' span_id:22))}
          spids: [20]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY') (/diff-lib.sh))})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:author)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'The Real Author <someguy@his.email.org>' span_id:39))}
          spids: [37]
        )
      ]
    )
    (C {(test_tick)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'initial status' span_id:49))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\techo bongo bongo >file &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\tgit status >actual &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Initial commit" actual\n' span_id:57)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fail initial amend' span_id:64))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit --amend\n' span_id:69)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: initial commit' span_id:76))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial\n' span_id:81)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'-m and -F do not mix' span_id:88))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:92) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout HEAD file && echo >>file && git add file &&\n'
            span_id: 93
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -m foo -m bar -F file\n' span_id:94)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'-m and -C do not mix' span_id:101))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout HEAD file && echo >>file && git add file &&\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -C HEAD -m illegal\n' span_id:107)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'paths and -a do not mix' span_id:114))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\techo King of the bongo >file &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -m foo -a file\n' span_id:120)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'can use paths with --interactive' span_id:129))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\techo bong-o-bong >file &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\t# 2: update, 1:st path, that is all, 7: quit\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\t( echo 2; echo 1; echo; echo 7 ) |\n' span_id:136) (Token id:Id.Lit_Chars val:'\tgit commit -m foo --interactive file &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^\n' span_id:138)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'using invalid commit with -C' span_id:145))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git commit --allow-empty -C bogus\n'
            span_id: 150
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'nothing to commit' span_id:157))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -m initial\n' span_id:163)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--dry-run fails with nothing to commit' span_id:170))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:174) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git commit -m initial --dry-run\n'
            span_id: 175
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--short fails with nothing to commit' span_id:182))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:186) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git commit -m initial --short\n'
            span_id: 187
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--porcelain fails with nothing to commit' span_id:194))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:198) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git commit -m initial --porcelain\n'
            span_id: 199
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--long fails with nothing to commit' span_id:206))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:210) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git commit -m initial --long\n'
            span_id: 211
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup: non-initial commit' span_id:218))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\techo bongo bongo bongo >file &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\tgit commit -m next -a\n' span_id:224)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--dry-run with stuff to commit returns ok' span_id:231))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:235) 
          (Token id:Id.Lit_Chars val:'\techo bongo bongo bongo >>file &&\n' span_id:236) (Token id:Id.Lit_Chars val:'\tgit commit -m next -a --dry-run\n' span_id:237)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'--short with stuff to commit returns ok' span_id:244))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\techo bongo bongo bongo >>file &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\tgit commit -m next -a --short\n' span_id:250)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'--porcelain with stuff to commit returns ok' span_id:257))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:261) 
          (Token id:Id.Lit_Chars val:'\techo bongo bongo bongo >>file &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\tgit commit -m next -a --porcelain\n' span_id:263)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--long with stuff to commit returns ok' span_id:270))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'\techo bongo bongo bongo >>file &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgit commit -m next -a --long\n' span_id:276)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit message from non-existing file' span_id:283))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:287) 
          (Token
            id: Id.Lit_Chars
            val: '\techo more bongo: bongo bongo bongo bongo >file &&\n'
            span_id: 288
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -F gah -a\n' span_id:289)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'empty commit message' span_id:296))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:300) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Empty except stray tabs and spaces on a few lines.\n'
            span_id: 301
          ) (Token id:Id.Lit_Chars val:'\tsed -e "s/@//g" >msg <<-\\EOF &&\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\t\t@\t\t@\n' span_id:303) (Token id:Id.Lit_Chars val:'\t\t@@\n' span_id:304) 
          (Token id:Id.Lit_Chars val:'\t\t@  @\n' span_id:305) (Token id:Id.Lit_Chars val:'\t\t@Signed-off-by: hula@\n' span_id:306) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:307) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -F msg -a\n' span_id:308)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'template "emptyness" check does not kick in with -F'
            span_id: 315
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:319) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout HEAD file && echo >>file && git add file &&\n'
            span_id: 320
          ) (Token id:Id.Lit_Chars val:'\tgit commit -t file -F file\n' span_id:321)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'template "emptyness" check' span_id:328))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:332) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout HEAD file && echo >>file && git add file &&\n'
            span_id: 333
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -t file 2>err &&\n' span_id:334) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "did not edit" err\n' span_id:335)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup: commit message from file' span_id:342))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:346) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout HEAD file && echo >>file && git add file &&\n'
            span_id: 347
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo this is the commit message, coming from a file >msg &&\n'
            span_id: 348
          ) (Token id:Id.Lit_Chars val:'\tgit commit -F msg -a\n' span_id:349)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'amend commit' span_id:356))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:360) 
          (Token id:Id.Lit_Chars val:'\tcat >editor <<-\\EOF &&\n' span_id:361) (Token id:Id.Lit_Chars val:'\t#!/bin/sh\n' span_id:362) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/a file/an amend commit/g" < "$1" > "$1-"\n'
            span_id: 363
          ) (Token id:Id.Lit_Chars val:'\tmv "$1-" "$1"\n' span_id:364) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:365) (Token id:Id.Lit_Chars val:'\tchmod 755 editor &&\n' span_id:366) 
          (Token id:Id.Lit_Chars val:'\tEDITOR=./editor git commit --amend\n' span_id:367)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'amend --only ignores staged contents' span_id:374))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:378) 
          (Token id:Id.Lit_Chars val:'\tcp file file.expect &&\n' span_id:379) (Token id:Id.Lit_Chars val:'\techo changed >file &&\n' span_id:380) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:381) (Token id:Id.Lit_Chars val:'\tgit commit --no-edit --amend --only &&\n' span_id:382) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob HEAD:file >file.actual &&\n'
            span_id: 383
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp file.expect file.actual &&\n' span_id:384) 
          (Token id:Id.Lit_Chars val:'\tgit diff --exit-code\n' span_id:385)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up editor' span_id:392))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:396) 
          (Token id:Id.Lit_Chars val:'\tcat >editor <<-\\EOF &&\n' span_id:397) (Token id:Id.Lit_Chars val:'\t#!/bin/sh\n' span_id:398) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/unamended/amended/g" <"$1" >"$1-"\n'
            span_id: 399
          ) (Token id:Id.Lit_Chars val:'\tmv "$1-" "$1"\n' span_id:400) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:401) (Token id:Id.Lit_Chars val:'\tchmod 755 editor\n' span_id:402)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'amend without launching editor' span_id:409))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:413) 
          (Token id:Id.Lit_Chars val:'\techo unamended >expect &&\n' span_id:414) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "unamended" &&\n' span_id:415) 
          (Token id:Id.Lit_Chars val:'\techo needs more bongo >file &&\n' span_id:416) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:417) 
          (Token
            id: Id.Lit_Chars
            val: '\tEDITOR=./editor git commit --no-edit --amend &&\n'
            span_id: 418
          ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code HEAD -- file &&\n' span_id:419) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -s --format=%s HEAD >msg &&\n'
            span_id: 420
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect msg\n' span_id:421)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--amend --edit' span_id:428))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:432) 
          (Token id:Id.Lit_Chars val:'\techo amended >expect &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "unamended" &&\n' span_id:434) 
          (Token id:Id.Lit_Chars val:'\techo bongo again >file &&\n' span_id:435) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:436) 
          (Token
            id: Id.Lit_Chars
            val: '\tEDITOR=./editor git commit --edit --amend &&\n'
            span_id: 437
          ) (Token id:Id.Lit_Chars val:'\tgit diff-tree -s --format=%s HEAD >msg &&\n' span_id:438) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect msg\n' span_id:439)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--amend --edit of empty message' span_id:446))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:450) 
          (Token id:Id.Lit_Chars val:'\tcat >replace <<-\\EOF &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\t#!/bin/sh\n' span_id:452) 
          (Token id:Id.Lit_Chars val:'\techo "amended" >"$1"\n' span_id:453) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:454) 
          (Token id:Id.Lit_Chars val:'\tchmod 755 replace &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty --allow-empty-message -m "" &&\n' span_id:456) 
          (Token id:Id.Lit_Chars val:'\techo more bongo >file &&\n' span_id:457) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:458) 
          (Token
            id: Id.Lit_Chars
            val: '\tEDITOR=./replace git commit --edit --amend &&\n'
            span_id: 459
          ) (Token id:Id.Lit_Chars val:'\tgit diff-tree -s --format=%s HEAD >msg &&\n' span_id:460) 
          (Token id:Id.Lit_Chars val:'\t./replace expect &&\n' span_id:461) (Token id:Id.Lit_Chars val:'\ttest_cmp expect msg\n' span_id:462)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--amend to set message to empty' span_id:469))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:473) 
          (Token id:Id.Lit_Chars val:'\techo bata >file &&\n' span_id:474) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:475) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "unamended" &&\n' span_id:476) (Token id:Id.Lit_Chars val:'\tgit commit --amend --allow-empty-message -m "" &&\n' span_id:477) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -s --format=%s HEAD >msg &&\n'
            span_id: 478
          ) (Token id:Id.Lit_Chars val:'\techo "" >expect &&\n' span_id:479) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect msg\n' span_id:480)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--amend to set empty message needs --allow-empty-message'
            span_id: 487
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:491) 
          (Token id:Id.Lit_Chars val:'\techo conga >file &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:493) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "unamended" &&\n' span_id:494) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit --amend -m "" &&\n' span_id:495) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -s --format=%s HEAD >msg &&\n'
            span_id: 496
          ) (Token id:Id.Lit_Chars val:'\techo "unamended" >expect &&\n' span_id:497) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect msg\n' span_id:498)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'-m --edit' span_id:505))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:509) 
          (Token id:Id.Lit_Chars val:'\techo amended >expect &&\n' span_id:510) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m buffer &&\n' span_id:511) 
          (Token id:Id.Lit_Chars val:'\techo bongo bongo >file &&\n' span_id:512) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:513) 
          (Token
            id: Id.Lit_Chars
            val: '\tEDITOR=./editor git commit -m unamended --edit &&\n'
            span_id: 514
          ) (Token id:Id.Lit_Chars val:'\tgit diff-tree -s  --format=%s HEAD >msg &&\n' span_id:515) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect msg\n' span_id:516)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'-m and -F do not mix' span_id:523))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:527) 
          (Token
            id: Id.Lit_Chars
            val: '\techo enough with the bongos >file &&\n'
            span_id: 528
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -F msg -m amending .\n' span_id:529)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'using message from other commit' span_id:536))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:540) 
          (Token id:Id.Lit_Chars val:'\tgit commit -C HEAD^ .\n' span_id:541)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'editing message from other commit' span_id:548))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:552) 
          (Token id:Id.Lit_Chars val:'\tcat >editor <<-\\EOF &&\n' span_id:553) (Token id:Id.Lit_Chars val:'\t#!/bin/sh\n' span_id:554) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/amend/older/g"  < "$1" > "$1-"\n'
            span_id: 555
          ) (Token id:Id.Lit_Chars val:'\tmv "$1-" "$1"\n' span_id:556) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:557) (Token id:Id.Lit_Chars val:'\tchmod 755 editor &&\n' span_id:558) 
          (Token id:Id.Lit_Chars val:'\techo hula hula >file &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\tEDITOR=./editor git commit -c HEAD^ -a\n' span_id:560)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'message from stdin' span_id:567))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:571) 
          (Token id:Id.Lit_Chars val:'\techo silly new contents >file &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\techo commit message from stdin |\n' span_id:573) 
          (Token id:Id.Lit_Chars val:'\tgit commit -F - -a\n' span_id:574)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'overriding author from command line' span_id:581))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:585) 
          (Token id:Id.Lit_Chars val:'\techo gak >file &&\n' span_id:586) (Token id:Id.Lit_Chars val:'\tgit commit -m author \\\n' span_id:587) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--author "Rubber Duck <rduck@convoy.org>" -a >output 2>&1 &&\n'
            span_id: 588
          ) (Token id:Id.Lit_Chars val:'\tgrep Rubber.Duck output\n' span_id:589)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} {(SQ (Token id:Id.Lit_Chars val:'interactive add' span_id:598))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:602) 
          (Token id:Id.Lit_Chars val:'\techo 7 |\n' span_id:603) (Token id:Id.Lit_Chars val:'\tgit commit --interactive |\n' span_id:604) 
          (Token id:Id.Lit_Chars val:'\tgrep "What now"\n' span_id:605)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(DQ ("commit --interactive doesn't change index if editor aborts"))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:618) 
          (Token id:Id.Lit_Chars val:'\techo zoo >file &&\n' span_id:619) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --exit-code >diff1 &&\n' span_id:620) 
          (Token id:Id.Lit_Chars val:'\t(echo u ; echo "*" ; echo q) |\n' span_id:621) (Token id:Id.Lit_Chars val:'\t(\n' span_id:622) 
          (Token id:Id.Lit_Chars val:'\t\tEDITOR=: &&\n' span_id:623) (Token id:Id.Lit_Chars val:'\t\texport EDITOR &&\n' span_id:624) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git commit --interactive\n'
            span_id: 625
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:626) 
          (Token id:Id.Lit_Chars val:'\tgit diff >diff2 &&\n' span_id:627) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch diff1 diff2\n' span_id:628)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'editor not invoked if -F is given' span_id:635))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:639) 
          (Token id:Id.Lit_Chars val:'\tcat >editor <<-\\EOF &&\n' span_id:640) (Token id:Id.Lit_Chars val:'\t#!/bin/sh\n' span_id:641) 
          (Token id:Id.Lit_Chars val:'\tsed -e s/good/bad/g <"$1" >"$1-"\n' span_id:642) (Token id:Id.Lit_Chars val:'\tmv "$1-" "$1"\n' span_id:643) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:644) (Token id:Id.Lit_Chars val:'\tchmod 755 editor &&\n' span_id:645) 
          (Token id:Id.Lit_Chars val:'\n' span_id:646) (Token id:Id.Lit_Chars val:'\techo A good commit message. >msg &&\n' span_id:647) 
          (Token id:Id.Lit_Chars val:'\techo moo >file &&\n' span_id:648) (Token id:Id.Lit_Chars val:'\n' span_id:649) 
          (Token
            id: Id.Lit_Chars
            val: '\tEDITOR=./editor git commit -a -F msg &&\n'
            span_id: 650
          ) (Token id:Id.Lit_Chars val:'\tgit show -s --pretty=format:%s >subject &&\n' span_id:651) 
          (Token id:Id.Lit_Chars val:'\tgrep -q good subject &&\n' span_id:652) (Token id:Id.Lit_Chars val:'\n' span_id:653) 
          (Token id:Id.Lit_Chars val:'\techo quack >file &&\n' span_id:654) (Token id:Id.Lit_Chars val:'\techo Another good message. |\n' span_id:655) 
          (Token
            id: Id.Lit_Chars
            val: '\tEDITOR=./editor git commit -a -F - &&\n'
            span_id: 656
          ) (Token id:Id.Lit_Chars val:'\tgit show -s --pretty=format:%s >subject &&\n' span_id:657) 
          (Token id:Id.Lit_Chars val:'\tgrep -q good subject\n' span_id:658)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'partial commit that involves removal (1)' span_id:665))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:669) (Token id:Id.Lit_Chars val:'\n' span_id:670) 
          (Token id:Id.Lit_Chars val:'\tgit rm --cached file &&\n' span_id:671) (Token id:Id.Lit_Chars val:'\tmv file elif &&\n' span_id:672) 
          (Token id:Id.Lit_Chars val:'\tgit add elif &&\n' span_id:673) (Token id:Id.Lit_Chars val:'\tgit commit -m "Partial: add elif" elif &&\n' span_id:674) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree --name-status HEAD^ HEAD >current &&\n'
            span_id: 675
          ) (Token id:Id.Lit_Chars val:'\techo "A\telif" >expected &&\n' span_id:676) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:677) (Token id:Id.Lit_Chars val:'\n' span_id:678)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'partial commit that involves removal (2)' span_id:685))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:689) (Token id:Id.Lit_Chars val:'\n' span_id:690) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Partial: remove file" file &&\n'
            span_id: 691
          ) (Token id:Id.Lit_Chars val:'\tgit diff-tree --name-status HEAD^ HEAD >current &&\n' span_id:692) 
          (Token id:Id.Lit_Chars val:'\techo "D\tfile" >expected &&\n' span_id:693) (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:694) 
          (Token id:Id.Lit_Chars val:'\n' span_id:695)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'partial commit that involves removal (3)' span_id:702))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:706) (Token id:Id.Lit_Chars val:'\n' span_id:707) 
          (Token id:Id.Lit_Chars val:'\tgit rm --cached elif &&\n' span_id:708) (Token id:Id.Lit_Chars val:'\techo elif >elif &&\n' span_id:709) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Partial: modify elif" elif &&\n'
            span_id: 710
          ) (Token id:Id.Lit_Chars val:'\tgit diff-tree --name-status HEAD^ HEAD >current &&\n' span_id:711) 
          (Token id:Id.Lit_Chars val:'\techo "M\telif" >expected &&\n' span_id:712) (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:713) 
          (Token id:Id.Lit_Chars val:'\n' span_id:714)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'amend commit to fix author' span_id:721))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:725) (Token id:Id.Lit_Chars val:'\n' span_id:726) 
          (Token id:Id.Lit_Chars val:'\toldtick=$GIT_AUTHOR_DATE &&\n' span_id:727) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:728) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:729) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD |\n' span_id:730) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/author.*/author $author $oldtick/" \\\n'
            span_id: 731
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t-e "s/^\\(committer.*> \\).*$/\\1$GIT_COMMITTER_DATE/" > \\\n'
            span_id: 732
          ) (Token id:Id.Lit_Chars val:'\t\texpected &&\n' span_id:733) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --amend --author="$author" &&\n'
            span_id: 734
          ) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD > current &&\n' span_id:735) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:736) (Token id:Id.Lit_Chars val:'\n' span_id:737)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'amend commit to fix date' span_id:744))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:748) (Token id:Id.Lit_Chars val:'\n' span_id:749) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:750) (Token id:Id.Lit_Chars val:'\tnewtick=$GIT_AUTHOR_DATE &&\n' span_id:751) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:752) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD |\n' span_id:753) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/author.*/author $author $newtick/" \\\n'
            span_id: 754
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t-e "s/^\\(committer.*> \\).*$/\\1$GIT_COMMITTER_DATE/" > \\\n'
            span_id: 755
          ) (Token id:Id.Lit_Chars val:'\t\texpected &&\n' span_id:756) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --amend --date="$newtick" &&\n'
            span_id: 757
          ) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD > current &&\n' span_id:758) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:759) (Token id:Id.Lit_Chars val:'\n' span_id:760)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit mentions forced date in output' span_id:767))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:771) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --amend --date=2010-01-02T03:04:05 >output &&\n'
            span_id: 772
          ) (Token id:Id.Lit_Chars val:'\tgrep "Date: *Sat Jan 2 03:04:05 2010" output\n' span_id:773)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit complains about completely bogus dates' span_id:780))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:784) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git commit --amend --date=seventeen\n'
            span_id: 785
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit --date allows approxidate' span_id:792))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:796) 
          (Token id:Id.Lit_Chars val:'\tgit commit --amend \\\n' span_id:797) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--date="midnight the 12th of october, anno domini 1979" &&\n'
            span_id: 798
          ) (Token id:Id.Lit_Chars val:'\techo "Fri Oct 12 00:00:00 1979 +0000" >expect &&\n' span_id:799) 
          (Token id:Id.Lit_Chars val:'\tgit log -1 --format=%ad >actual &&\n' span_id:800) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:801)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'sign off (1)' span_id:808))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:812) (Token id:Id.Lit_Chars val:'\n' span_id:813) 
          (Token id:Id.Lit_Chars val:'\techo 1 >positive &&\n' span_id:814) (Token id:Id.Lit_Chars val:'\tgit add positive &&\n' span_id:815) 
          (Token id:Id.Lit_Chars val:'\tgit commit -s -m "thank you" &&\n' span_id:816) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >actual &&\n'
            span_id: 817
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:818) 
          (Token id:Id.Lit_Chars val:'\t\techo thank you\n' span_id:819) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:820) 
          (Token id:Id.Lit_Chars val:'\t\tgit var GIT_COMMITTER_IDENT |\n' span_id:821) (Token id:Id.Lit_Chars val:'\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n' span_id:822) 
          (Token id:Id.Lit_Chars val:'\t) >expected &&\n' span_id:823) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:824) 
          (Token id:Id.Lit_Chars val:'\n' span_id:825)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'sign off (2)' span_id:832))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:836) (Token id:Id.Lit_Chars val:'\n' span_id:837) 
          (Token id:Id.Lit_Chars val:'\techo 2 >positive &&\n' span_id:838) (Token id:Id.Lit_Chars val:'\tgit add positive &&\n' span_id:839) 
          (Token
            id: Id.Lit_Chars
            val: '\texisting="Signed-off-by: Watch This <watchthis@example.com>" &&\n'
            span_id: 840
          ) (Token id:Id.Lit_Chars val:'\tgit commit -s -m "thank you\n' span_id:841) 
          (Token id:Id.Lit_Chars val:'\n' span_id:842) (Token id:Id.Lit_Chars val:'$existing" &&\n' span_id:843) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >actual &&\n'
            span_id: 844
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:845) 
          (Token id:Id.Lit_Chars val:'\t\techo thank you\n' span_id:846) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:847) 
          (Token id:Id.Lit_Chars val:'\t\techo $existing\n' span_id:848) (Token id:Id.Lit_Chars val:'\t\tgit var GIT_COMMITTER_IDENT |\n' span_id:849) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n'
            span_id: 850
          ) (Token id:Id.Lit_Chars val:'\t) >expected &&\n' span_id:851) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:852) (Token id:Id.Lit_Chars val:'\n' span_id:853)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'signoff gap' span_id:860))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:864) (Token id:Id.Lit_Chars val:'\n' span_id:865) 
          (Token id:Id.Lit_Chars val:'\techo 3 >positive &&\n' span_id:866) (Token id:Id.Lit_Chars val:'\tgit add positive &&\n' span_id:867) 
          (Token id:Id.Lit_Chars val:'\talt="Alt-RFC-822-Header: Value" &&\n' span_id:868) (Token id:Id.Lit_Chars val:'\tgit commit -s -m "welcome\n' span_id:869) 
          (Token id:Id.Lit_Chars val:'\n' span_id:870) (Token id:Id.Lit_Chars val:'$alt" &&\n' span_id:871) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" > actual &&\n'
            span_id: 872
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\t\techo welcome\n' span_id:874) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:875) 
          (Token id:Id.Lit_Chars val:'\t\techo $alt\n' span_id:876) (Token id:Id.Lit_Chars val:'\t\tgit var GIT_COMMITTER_IDENT |\n' span_id:877) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n'
            span_id: 878
          ) (Token id:Id.Lit_Chars val:'\t) >expected &&\n' span_id:879) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:880)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'signoff gap 2' span_id:887))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:891) (Token id:Id.Lit_Chars val:'\n' span_id:892) 
          (Token id:Id.Lit_Chars val:'\techo 4 >positive &&\n' span_id:893) (Token id:Id.Lit_Chars val:'\tgit add positive &&\n' span_id:894) 
          (Token id:Id.Lit_Chars val:'\talt="fixed: 34" &&\n' span_id:895) (Token id:Id.Lit_Chars val:'\tgit commit -s -m "welcome\n' span_id:896) 
          (Token id:Id.Lit_Chars val:'\n' span_id:897) (Token id:Id.Lit_Chars val:'We have now\n' span_id:898) 
          (Token id:Id.Lit_Chars val:'$alt" &&\n' span_id:899) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" > actual &&\n'
            span_id: 900
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:901) 
          (Token id:Id.Lit_Chars val:'\t\techo welcome\n' span_id:902) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:903) 
          (Token id:Id.Lit_Chars val:'\t\techo We have now\n' span_id:904) (Token id:Id.Lit_Chars val:'\t\techo $alt\n' span_id:905) 
          (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:906) (Token id:Id.Lit_Chars val:'\t\tgit var GIT_COMMITTER_IDENT |\n' span_id:907) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"\n'
            span_id: 908
          ) (Token id:Id.Lit_Chars val:'\t) >expected &&\n' span_id:909) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:910)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'multiple -m' span_id:917))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:921) (Token id:Id.Lit_Chars val:'\n' span_id:922) 
          (Token id:Id.Lit_Chars val:'\t>negative &&\n' span_id:923) (Token id:Id.Lit_Chars val:'\tgit add negative &&\n' span_id:924) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "one" -m "two" -m "three" &&\n'
            span_id: 925
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >actual &&\n'
            span_id: 926
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:927) 
          (Token id:Id.Lit_Chars val:'\t\techo one\n' span_id:928) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:929) 
          (Token id:Id.Lit_Chars val:'\t\techo two\n' span_id:930) (Token id:Id.Lit_Chars val:'\t\techo\n' span_id:931) 
          (Token id:Id.Lit_Chars val:'\t\techo three\n' span_id:932) (Token id:Id.Lit_Chars val:'\t) >expected &&\n' span_id:933) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:934) (Token id:Id.Lit_Chars val:'\n' span_id:935)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'amend commit to fix author' span_id:942))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:946) (Token id:Id.Lit_Chars val:'\n' span_id:947) 
          (Token id:Id.Lit_Chars val:'\toldtick=$GIT_AUTHOR_DATE &&\n' span_id:948) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:949) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:950) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD |\n' span_id:951) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/author.*/author $author $oldtick/" \\\n'
            span_id: 952
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t-e "s/^\\(committer.*> \\).*$/\\1$GIT_COMMITTER_DATE/" > \\\n'
            span_id: 953
          ) (Token id:Id.Lit_Chars val:'\t\texpected &&\n' span_id:954) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --amend --author="$author" &&\n'
            span_id: 955
          ) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD > current &&\n' span_id:956) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:957) (Token id:Id.Lit_Chars val:'\n' span_id:958)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git commit <file> with dirty index' span_id:965))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:969) 
          (Token id:Id.Lit_Chars val:'\techo tacocat > elif &&\n' span_id:970) (Token id:Id.Lit_Chars val:'\techo tehlulz > chz &&\n' span_id:971) 
          (Token id:Id.Lit_Chars val:'\tgit add chz &&\n' span_id:972) (Token id:Id.Lit_Chars val:'\tgit commit elif -m "tacocat is a palindrome" &&\n' span_id:973) 
          (Token id:Id.Lit_Chars val:'\tgit show --stat | grep elif &&\n' span_id:974) (Token id:Id.Lit_Chars val:'\tgit diff --cached | grep chz\n' span_id:975)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'same tree (single parent)' span_id:982))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:986) (Token id:Id.Lit_Chars val:'\n' span_id:987) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:988) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit -m empty\n' span_id:989) 
          (Token id:Id.Lit_Chars val:'\n' span_id:990)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'same tree (single parent) --allow-empty' span_id:997))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1001) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1002) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "forced empty" &&\n' span_id:1003) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit HEAD | grep forced\n'
            span_id: 1004
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1005)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'same tree (merge and amend merge)' span_id:1012))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1016) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1017) (Token id:Id.Lit_Chars val:'\tgit checkout -b side HEAD^ &&\n' span_id:1018) 
          (Token id:Id.Lit_Chars val:'\techo zero >zero &&\n' span_id:1019) (Token id:Id.Lit_Chars val:'\tgit add zero &&\n' span_id:1020) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "add zero" &&\n' span_id:1021) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1022) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1023) (Token id:Id.Lit_Chars val:'\tgit merge -s ours side -m "empty ok" &&\n' span_id:1024) 
          (Token id:Id.Lit_Chars val:'\tgit diff HEAD^ HEAD >actual &&\n' span_id:1025) (Token id:Id.Lit_Chars val:'\t: >expected &&\n' span_id:1026) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:1027) (Token id:Id.Lit_Chars val:'\n' span_id:1028) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --amend -m "empty really ok" &&\n'
            span_id: 1029
          ) (Token id:Id.Lit_Chars val:'\tgit diff HEAD^ HEAD >actual &&\n' span_id:1030) 
          (Token id:Id.Lit_Chars val:'\t: >expected &&\n' span_id:1031) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1032) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1033)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'amend using the message from another commit' span_id:1040))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1044) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1045) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1046) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1047) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "old commit" &&\n' span_id:1048) 
          (Token
            id: Id.Lit_Chars
            val: '\told=$(git rev-parse --verify HEAD) &&\n'
            span_id: 1049
          ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1050) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --allow-empty -m "new commit" &&\n'
            span_id: 1051
          ) (Token id:Id.Lit_Chars val:'\tnew=$(git rev-parse --verify HEAD) &&\n' span_id:1052) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1053) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty --amend -C "$old" &&\n' span_id:1054) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show --pretty="format:%ad %s" "$old" >expected &&\n'
            span_id: 1055
          ) (Token id:Id.Lit_Chars val:'\tgit show --pretty="format:%ad %s" HEAD >actual &&\n' span_id:1056) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1057) (Token id:Id.Lit_Chars val:'\n' span_id:1058)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'amend using the message from a commit named with tag'
            span_id: 1065
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1069) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1070) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1071) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1072) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "old commit" &&\n' span_id:1073) 
          (Token
            id: Id.Lit_Chars
            val: '\told=$(git rev-parse --verify HEAD) &&\n'
            span_id: 1074
          ) (Token id:Id.Lit_Chars val:'\tgit tag -a -m "tag on old" tagged-old HEAD &&\n' span_id:1075) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1076) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "new commit" &&\n' span_id:1077) 
          (Token
            id: Id.Lit_Chars
            val: '\tnew=$(git rev-parse --verify HEAD) &&\n'
            span_id: 1078
          ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1079) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --allow-empty --amend -C tagged-old &&\n'
            span_id: 1080
          ) (Token id:Id.Lit_Chars val:'\tgit show --pretty="format:%ad %s" "$old" >expected &&\n' span_id:1081) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show --pretty="format:%ad %s" HEAD >actual &&\n'
            span_id: 1082
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1083) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1084)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'amend can copy notes' span_id:1091))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1095) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1096) (Token id:Id.Lit_Chars val:'\tgit config notes.rewrite.amend true &&\n' span_id:1097) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config notes.rewriteRef "refs/notes/*" &&\n'
            span_id: 1098
          ) (Token id:Id.Lit_Chars val:'\ttest_commit foo &&\n' span_id:1099) 
          (Token id:Id.Lit_Chars val:'\tgit notes add -m"a note" &&\n' span_id:1100) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1101) 
          (Token id:Id.Lit_Chars val:'\tgit commit --amend -m"new foo" &&\n' span_id:1102) (Token id:Id.Lit_Chars val:'\ttest "$(git notes show)" = "a note"\n' span_id:1103) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1104)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit a file whose name is a dash' span_id:1111))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1115) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1116) (Token id:Id.Lit_Chars val:'\tfor i in 1 2 3 4 5\n' span_id:1117) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:1118) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:1119) 
          (Token id:Id.Lit_Chars val:'\tdone >./- &&\n' span_id:1120) (Token id:Id.Lit_Chars val:'\tgit add ./- &&\n' span_id:1121) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1122) (Token id:Id.Lit_Chars val:'\tgit commit -m "add dash" >output </dev/null &&\n' span_id:1123) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep " changed, 5 insertions" output\n'
            span_id: 1124
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--only works on to-be-born branch' span_id:1131))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1135) 
          (Token
            id: Id.Lit_Chars
            val: '\t# This test relies on having something in the index, as it\n'
            span_id: 1136
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# would not otherwise actually prove much.  So check this.\n'
            span_id: 1137
          ) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files)" &&\n' span_id:1138) 
          (Token id:Id.Lit_Chars val:'\tgit checkout --orphan orphan &&\n' span_id:1139) (Token id:Id.Lit_Chars val:'\techo foo >newfile &&\n' span_id:1140) 
          (Token id:Id.Lit_Chars val:'\tgit add newfile &&\n' span_id:1141) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --only newfile -m"--only on unborn branch" &&\n'
            span_id: 1142
          ) (Token id:Id.Lit_Chars val:'\techo newfile >expected &&\n' span_id:1143) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-tree -r --name-only HEAD >actual &&\n'
            span_id: 1144
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1145)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--dry-run with conflicts fixed from a merge' span_id:1152))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1156) 
          (Token
            id: Id.Lit_Chars
            val: '\t# setup two branches with conflicting information\n'
            span_id: 1157
          ) (Token id:Id.Lit_Chars val:'\t# in the same file, resolve the conflict,\n' span_id:1158) 
          (Token id:Id.Lit_Chars val:'\t# call commit with --dry-run\n' span_id:1159) (Token id:Id.Lit_Chars val:'\techo "Initial contents, unimportant" >test-file &&\n' span_id:1160) 
          (Token id:Id.Lit_Chars val:'\tgit add test-file &&\n' span_id:1161) (Token id:Id.Lit_Chars val:'\tgit commit -m "Initial commit" &&\n' span_id:1162) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "commit-1-state" >test-file &&\n'
            span_id: 1163
          ) (Token id:Id.Lit_Chars val:'\tgit commit -m "commit 1" -i test-file &&\n' span_id:1164) 
          (Token id:Id.Lit_Chars val:'\tgit tag commit-1 &&\n' span_id:1165) (Token id:Id.Lit_Chars val:'\tgit checkout -b branch-2 HEAD^1 &&\n' span_id:1166) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "commit-2-state" >test-file &&\n'
            span_id: 1167
          ) (Token id:Id.Lit_Chars val:'\tgit commit -m "commit 2" -i test-file &&\n' span_id:1168) 
          (Token
            id: Id.Lit_Chars
            val: '\t! $(git merge --no-commit commit-1) &&\n'
            span_id: 1169
          ) (Token id:Id.Lit_Chars val:'\techo "commit-2-state" >test-file &&\n' span_id:1170) 
          (Token id:Id.Lit_Chars val:'\tgit add test-file &&\n' span_id:1171) (Token id:Id.Lit_Chars val:'\tgit commit --dry-run &&\n' span_id:1172) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "conflicts fixed from merge."\n'
            span_id: 1173
          )
        )
      }
    )
    (C {(test_done)})
  ]
)