(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git fast-export">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <"\n"> <"\n"> <"\techo break it > file0 &&\n"> <"\tgit add file0 &&\n"> <"\ttest_tick &&\n"> 
          <"\techo Wohlauf > file &&\n"> <"\tgit add file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m initial &&\n"> 
          <"\techo die Luft > file &&\n"> <"\techo geht frisch > file2 &&\n"> <"\tgit add file file2 &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m second &&\n"> <"\techo und > file2 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m third file2 &&\n"> 
          <"\ttest_tick &&\n"> <"\tgit tag rein &&\n"> <"\tgit checkout -b wer HEAD^ &&\n"> <"\techo lange > file2 &&\n"> 
          <"\ttest_tick &&\n"> <"\tgit commit -m sitzt file2 &&\n"> <"\ttest_tick &&\n"> <"\tgit tag -a -m valentin muss &&\n"> 
          <"\tgit merge -s ours master\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"fast-export | fast-import">)} 
      {
        (SQ <"\n"> <"\n"> <"\tMASTER=$(git rev-parse --verify master) &&\n"> 
          <"\tREIN=$(git rev-parse --verify rein) &&\n"> <"\tWER=$(git rev-parse --verify wer) &&\n"> <"\tMUSS=$(git rev-parse --verify muss) &&\n"> 
          <"\tmkdir new &&\n"> <"\tgit --git-dir=new/.git init &&\n"> <"\tgit fast-export --all |\n"> <"\t(cd new &&\n"> 
          <"\t git fast-import &&\n"> <"\t test $MASTER = $(git rev-parse --verify refs/heads/master) &&\n"> 
          <"\t test $REIN = $(git rev-parse --verify refs/tags/rein) &&\n"> <"\t test $WER = $(git rev-parse --verify refs/heads/wer) &&\n"> 
          <"\t test $MUSS = $(git rev-parse --verify refs/tags/muss))\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"fast-export master~2..master">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit fast-export master~2..master |\n"> 
          <"\t\tsed \"s/master/partial/\" |\n"> <"\t\t(cd new &&\n"> <"\t\t git fast-import &&\n"> 
          <"\t\t test $MASTER != $(git rev-parse --verify refs/heads/partial) &&\n"> <"\t\t git diff --exit-code master partial &&\n"> <"\t\t git diff --exit-code master^ partial^ &&\n"> 
          <"\t\t test_must_fail git rev-parse partial~2)\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <iso-8859-1>)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit config i18n.commitencoding ISO8859-1 &&\n"> 
          <"\t# use author and committer name in ISO-8859-1 to match it.\n"> <"\t. \"$TEST_DIRECTORY\"/t3901-8859-1.txt &&\n"> <"\ttest_tick &&\n"> <"\techo rosten >file &&\n"> 
          <"\tgit commit -s -m den file &&\n"> <"\tgit fast-export wer^..wer |\n"> <"\t\tsed \"s/wer/i18n/\" |\n"> <"\t\t(cd new &&\n"> 
          <"\t\t git fast-import &&\n"> <"\t\t git cat-file commit i18n | grep \"\u00c1\u00e9\u00ed \u00f3\u00fa\")\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <import/export-marks>)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit checkout -b marks master &&\n"> 
          <"\tgit fast-export --export-marks=tmp-marks HEAD &&\n"> <"\ttest -s tmp-marks &&\n"> <"\ttest_line_count = 3 tmp-marks &&\n"> <"\ttest $(\n"> 
          <"\t\tgit fast-export --import-marks=tmp-marks\\\n"> <"\t\t--export-marks=tmp-marks HEAD |\n"> <"\t\tgrep ^commit |\n"> <"\t\twc -l) \\\n"> <"\t-eq 0 &&\n"> 
          <"\techo change > file &&\n"> <"\tgit commit -m \"last commit\" file &&\n"> <"\ttest $(\n"> 
          <"\t\tgit fast-export --import-marks=tmp-marks \\\n"> <"\t\t--export-marks=tmp-marks HEAD |\n"> <"\t\tgrep ^commit\\  |\n"> <"\t\twc -l) \\\n"> 
          <"\t-eq 1 &&\n"> <"\ttest_line_count = 4 tmp-marks\n"> <"\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(signed-tag-import)} spids:[164])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("tag sign-your-name\n") ("from ") 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(HEAD)})])
                  left_token: <Left_CommandSub "$(">
                  spids: [174 180]
                ) ("\n") ("tagger C O Mitter <committer@example.com> 1112911993 -0700\n") ("data 210\n") 
                ("A message for a sign\n") ("-----BEGIN PGP SIGNATURE-----\n") ("Version: GnuPG v1.4.5 (GNU/Linux)\n") ("\n") 
                ("fakedsignaturefakedsignaturefakedsignaturefakedsignaturfakedsign\n") ("aturefakedsignaturefake=\n") ("=/59v\n") ("-----END PGP SIGNATURE-----\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [168]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"set up faked signed tag">)} 
      {(SQ <"\n"> <"\n"> <"\tcat signed-tag-import | git fast-import\n"> <"\n">)}
    )
    (C {(test_expect_success)} {(SQ <"signed-tags=abort">)} 
      {
        (SQ <"\n"> <"\n"> <"\ttest_must_fail git fast-export --signed-tags=abort sign-your-name\n"> 
          <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"signed-tags=verbatim">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit fast-export --signed-tags=verbatim sign-your-name > output &&\n"> 
          <"\tgrep PGP output\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"signed-tags=strip">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit fast-export --signed-tags=strip sign-your-name > output &&\n"> 
          <"\t! grep PGP output\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"signed-tags=warn-strip">)} 
      {
        (SQ <"\n"> <"\tgit fast-export --signed-tags=warn-strip sign-your-name >output 2>err &&\n"> 
          <"\t! grep PGP output &&\n"> <"\ttest -s err\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"setup submodule">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit checkout -f master &&\n"> <"\tmkdir sub &&\n"> <"\t(\n"> 
          <"\t\tcd sub &&\n"> <"\t\tgit init  &&\n"> <"\t\techo test file > file &&\n"> <"\t\tgit add file &&\n"> 
          <"\t\tgit commit -m sub_initial\n"> <"\t) &&\n"> <"\tgit submodule add \"$(pwd)/sub\" sub &&\n"> <"\tgit commit -m initial &&\n"> 
          <"\ttest_tick &&\n"> <"\t(\n"> <"\t\tcd sub &&\n"> <"\t\techo more data >> file &&\n"> <"\t\tgit add file &&\n"> 
          <"\t\tgit commit -m sub_second\n"> <"\t) &&\n"> <"\tgit add sub &&\n"> <"\tgit commit -m second\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"submodule fast-export | fast-import">)} 
      {
        (SQ <"\n"> <"\n"> <"\tSUBENT1=$(git ls-tree master^ sub) &&\n"> 
          <"\tSUBENT2=$(git ls-tree master sub) &&\n"> <"\trm -rf new &&\n"> <"\tmkdir new &&\n"> <"\tgit --git-dir=new/.git init &&\n"> 
          <"\tgit fast-export --signed-tags=strip --all |\n"> <"\t(cd new &&\n"> <"\t git fast-import &&\n"> 
          <"\t test \"$SUBENT1\" = \"$(git ls-tree refs/heads/master^ sub)\" &&\n"> <"\t test \"$SUBENT2\" = \"$(git ls-tree refs/heads/master sub)\" &&\n"> 
          <"\t git checkout master &&\n"> <"\t git submodule init &&\n"> <"\t git submodule update &&\n"> <"\t cmp sub/file ../sub/file)\n"> 
          <"\n">
        )
      }
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_AUTHOR_NAME)
              op: Equal
              rhs: {(SQ <"A U Thor">)}
              spids: [325]
            )
          ]
          spids: [325]
        )
      terminator: <Op_Semi ";">
    )
    (C {(export)} {(GIT_AUTHOR_NAME)})
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_COMMITTER_NAME)
              op: Equal
              rhs: {(SQ <"C O Mitter">)}
              spids: [335]
            )
          ]
          spids: [335]
        )
      terminator: <Op_Semi ";">
    )
    (C {(export)} {(GIT_COMMITTER_NAME)})
    (C {(test_expect_success)} {(SQ <"setup copies">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit config --unset i18n.commitencoding &&\n"> 
          <"\tgit checkout -b copy rein &&\n"> <"\tgit mv file file3 &&\n"> <"\tgit commit -m move1 &&\n"> <"\ttest_tick &&\n"> 
          <"\tcp file2 file4 &&\n"> <"\tgit add file4 &&\n"> <"\tgit mv file2 file5 &&\n"> <"\tgit commit -m copy1 &&\n"> 
          <"\ttest_tick &&\n"> <"\tcp file3 file6 &&\n"> <"\tgit add file6 &&\n"> <"\tgit commit -m copy2 &&\n"> <"\ttest_tick &&\n"> 
          <"\techo more text >> file6 &&\n"> <"\techo even more text >> file6 &&\n"> <"\tgit add file6 &&\n"> <"\tgit commit -m modify &&\n"> 
          <"\ttest_tick &&\n"> <"\tcp file6 file7 &&\n"> <"\techo test >> file7 &&\n"> <"\tgit add file7 &&\n"> 
          <"\tgit commit -m copy_modify\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"fast-export -C -C | fast-import">)} 
      {
        (SQ <"\n"> <"\n"> <"\tENTRY=$(git rev-parse --verify copy) &&\n"> <"\trm -rf new &&\n"> 
          <"\tmkdir new &&\n"> <"\tgit --git-dir=new/.git init &&\n"> 
          <"\tgit fast-export -C -C --signed-tags=strip --all > output &&\n"> <"\tgrep \"^C file6 file7\\$\" output &&\n"> <"\tcat output |\n"> <"\t(cd new &&\n"> 
          <"\t git fast-import &&\n"> <"\t test $ENTRY = $(git rev-parse --verify refs/heads/copy))\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"fast-export | fast-import when master is tagged">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit tag -m msg last &&\n"> 
          <"\tgit fast-export -C -C --signed-tags=strip --all > output &&\n"> <"\ttest $(grep -c \"^tag \" output) = 3\n"> <"\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(tag-content)} spids:[423])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("object ") 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(HEAD)})])
                  left_token: <Left_CommandSub "$(">
                  spids: [432 438]
                ) ("\n") ("type commit\n") ("tag rosten\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [427]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"cope with tagger-less tags">)} 
      {
        (SQ <"\n"> <"\n"> <"\tTAG=$(git hash-object -t tag -w tag-content) &&\n"> 
          <"\tgit update-ref refs/tags/sonnenschein $TAG &&\n"> <"\tgit fast-export -C -C --signed-tags=strip --all > output &&\n"> 
          <"\ttest $(grep -c \"^tag \" output) = 4 &&\n"> <"\t! grep \"Unspecified Tagger\" output &&\n"> 
          <"\tgit fast-export -C -C --signed-tags=strip --all \\\n"> <"\t\t--fake-missing-tagger > output &&\n"> <"\ttest $(grep -c \"^tag \" output) = 4 &&\n"> 
          <"\tgrep \"Unspecified Tagger\" output\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"setup for limiting exports by PATH">)} 
      {
        (SQ <"\n"> <"\tmkdir limit-by-paths &&\n"> <"\t(\n"> <"\t\tcd limit-by-paths &&\n"> 
          <"\t\tgit init &&\n"> <"\t\techo hi > there &&\n"> <"\t\tgit add there &&\n"> <"\t\tgit commit -m \"First file\" &&\n"> 
          <"\t\techo foo > bar &&\n"> <"\t\tgit add bar &&\n"> <"\t\tgit commit -m \"Second file\" &&\n"> 
          <"\t\tgit tag -a -m msg mytag &&\n"> <"\t\techo morefoo >> bar &&\n"> <"\t\tgit add bar &&\n"> 
          <"\t\tgit commit -m \"Change to second file\"\n"> <"\t)\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(limit-by-paths/expected)} spids:[493])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("blob\n") ("mark :1\n") ("data 3\n") ("hi\n") ("\n") ("reset refs/tags/mytag\n") 
                ("commit refs/tags/mytag\n") ("mark :2\n") ("author A U Thor <author@example.com> 1112912713 -0700\n") 
                ("committer C O Mitter <committer@example.com> 1112912713 -0700\n") ("data 11\n") ("First file\n") ("M 100644 :1 there\n") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [497]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"dropping tag of filtered out object">)} 
      {
        (SQ <"\n"> <"(\n"> <"\tcd limit-by-paths &&\n"> 
          <"\tgit fast-export --tag-of-filtered-object=drop mytag -- there > output &&\n"> <"\ttest_cmp expected output\n"> <")\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_DGreat fd:-1 arg_word:{(limit-by-paths/expected)} spids:[534])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("tag mytag\n") ("from :2\n") 
                ("tagger C O Mitter <committer@example.com> 1112912713 -0700\n") ("data 4\n") ("msg\n") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [538]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"rewriting tag of filtered out object">)} 
      {
        (SQ <"\n"> <"(\n"> <"\tcd limit-by-paths &&\n"> 
          <"\tgit fast-export --tag-of-filtered-object=rewrite mytag -- there > output &&\n"> <"\ttest_cmp expected output\n"> <")\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(limit-by-paths/expected)} spids:[567])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("blob\n") ("mark :1\n") ("data 4\n") ("foo\n") ("\n") ("blob\n") ("mark :2\n") 
                ("data 3\n") ("hi\n") ("\n") ("reset refs/heads/master\n") ("commit refs/heads/master\n") ("mark :3\n") 
                ("author A U Thor <author@example.com> 1112912713 -0700\n") ("committer C O Mitter <committer@example.com> 1112912713 -0700\n") ("data 12\n") ("Second file\n") 
                ("M 100644 :1 bar\n") ("M 100644 :2 there\n") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [571]
        )
      ]
    )
    (C {(test_expect_failure)} {(SQ <"no exact-ref revisions included">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd limit-by-paths &&\n"> 
          <"\t\tgit fast-export master~2..master~1 > output &&\n"> <"\t\ttest_cmp expected output\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"path limiting with import-marks does not lose unmodified files">)} 
      {
        (SQ <"\n"> <"\tgit checkout -b simple marks~2 &&\n"> 
          <"\tgit fast-export --export-marks=marks simple -- file > /dev/null &&\n"> <"\techo more content >> file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -mnext file &&\n"> 
          <"\tgit fast-export --import-marks=marks simple -- file file0 | grep file0\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"full-tree re-shows unmodified files">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f simple &&\n"> 
          <"\ttest $(git fast-export --full-tree simple | grep -c file0) -eq 3\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"set-up a few more tags for tag export tests">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f master &&\n"> 
          <"\tHEAD_TREE=$(git show -s --pretty=raw HEAD | grep tree | sed \"s/tree //\") &&\n"> <"\tgit tag    tree_tag        -m \"tagging a tree\" $HEAD_TREE &&\n"> 
          <"\tgit tag -a tree_tag-obj    -m \"tagging a tree\" $HEAD_TREE &&\n"> <"\tgit tag    tag-obj_tag     -m \"tagging a tag\" tree_tag-obj &&\n"> 
          <"\tgit tag -a tag-obj_tag-obj -m \"tagging a tag\" tree_tag-obj\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <tree_tag>)} 
      {
        (SQ <"\n"> <"\tmkdir result &&\n"> <"\t(cd result && git init) &&\n"> 
          <"\tgit fast-export tree_tag > fe-stream &&\n"> <"\t(cd result && git fast-import < ../fe-stream)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <tree_tag-obj>)} {(SQ <"git fast-export tree_tag-obj">)})
    (C {(test_expect_success)} {(SQ <tag-obj_tag>)} {(SQ <"git fast-export tag-obj_tag">)})
    (C {(test_expect_success)} {(SQ <tag-obj_tag-obj>)} {(SQ <"git fast-export tag-obj_tag-obj">)})
    (C {(test_expect_success)} {(SQ <"directory becomes symlink">)} 
      {
        (SQ <"\n"> <"\tgit init dirtosymlink &&\n"> <"\tgit init result &&\n"> <"\t(\n"> 
          <"\t\tcd dirtosymlink &&\n"> <"\t\tmkdir foo &&\n"> <"\t\tmkdir bar &&\n"> <"\t\techo hello > foo/world &&\n"> 
          <"\t\techo hello > bar/world &&\n"> <"\t\tgit add foo/world bar/world &&\n"> <"\t\tgit commit -q -mone &&\n"> <"\t\tgit rm -r foo &&\n"> 
          <"\t\ttest_ln_s_add bar foo &&\n"> <"\t\tgit commit -q -mtwo\n"> <"\t) &&\n"> <"\t(\n"> <"\t\tcd dirtosymlink &&\n"> 
          <"\t\tgit fast-export master -- foo |\n"> <"\t\t(cd ../result && git fast-import --quiet)\n"> <"\t) &&\n"> 
          <"\t(cd result && git show master:foo)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"fast-export quotes pathnames">)} 
      {
        (SQ <"\n"> <"\tgit init crazy-paths &&\n"> <"\t(cd crazy-paths &&\n"> 
          <"\t blob=$(echo foo | git hash-object -w --stdin) &&\n"> <"\t git update-index --add \\\n"> 
          <"\t\t--cacheinfo 100644 $blob \"$(printf \"path with\\\\nnewline\")\" \\\n"> <"\t\t--cacheinfo 100644 $blob \"path with \\\"quote\\\"\" \\\n"> 
          <"\t\t--cacheinfo 100644 $blob \"path with \\\\backslash\" \\\n"> <"\t\t--cacheinfo 100644 $blob \"path with space\" &&\n"> <"\t git commit -m addition &&\n"> 
          <"\t git ls-files -z -s | perl -0pe \"s{\\\\t}{$&subdir/}\" >index &&\n"> <"\t git read-tree --empty &&\n"> <"\t git update-index -z --index-info <index &&\n"> 
          <"\t git commit -m rename &&\n"> <"\t git read-tree --empty &&\n"> <"\t git commit -m deletion &&\n"> 
          <"\t git fast-export -M HEAD >export.out &&\n"> <"\t git rev-list HEAD >expect &&\n"> <"\t git init result &&\n"> <"\t cd result &&\n"> 
          <"\t git fast-import <../export.out &&\n"> <"\t git rev-list HEAD >actual &&\n"> <"\t test_cmp ../expect actual\n"> <"\t)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"test bidirectionality">)} 
      {
        (SQ <"\n"> <"\t>marks-cur &&\n"> <"\t>marks-new &&\n"> <"\tgit init marks-test &&\n"> 
          <"\tgit fast-export --export-marks=marks-cur --import-marks=marks-cur --branches | \\\n"> 
          <
"\tgit --git-dir=marks-test/.git fast-import --export-marks=marks-new --import-marks=marks-new &&\n"
          > <"\t(cd marks-test &&\n"> <"\tgit reset --hard &&\n"> <"\techo Wohlauf > file &&\n"> 
          <"\tgit commit -a -m \"back in time\") &&\n"> 
          <
"\tgit --git-dir=marks-test/.git fast-export --export-marks=marks-new --import-marks=marks-new --branches | \\\n"
          > <"\tgit fast-import --export-marks=marks-cur --import-marks=marks-cur\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[797])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("blob\n") ("mark :13\n") ("data 5\n") ("bump\n") ("\n") ("commit refs/heads/master\n") 
                ("mark :14\n") ("author A U Thor <author@example.com> 1112912773 -0700\n") 
                ("committer C O Mitter <committer@example.com> 1112912773 -0700\n") ("data 5\n") ("bump\n") ("from :12\n") ("M 100644 :13 file\n") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [801]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"avoid uninteresting refs">)} 
      {
        (SQ <"\n"> <"\t> tmp-marks &&\n"> <"\tgit fast-export --import-marks=tmp-marks \\\n"> 
          <"\t\t--export-marks=tmp-marks master > /dev/null &&\n"> <"\tgit tag v1.0 &&\n"> <"\tgit branch uninteresting &&\n"> <"\techo bump > file &&\n"> 
          <"\tgit commit -a -m bump &&\n"> <"\tgit fast-export --import-marks=tmp-marks \\\n"> 
          <"\t\t--export-marks=tmp-marks ^uninteresting ^v1.0 master > actual &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[843])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {(DQ ("reset refs/heads/master\n") ("from :14\n") ("\n"))}
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [847]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"refs are updated even if no commits need to be exported">)} 
      {
        (SQ <"\n"> <"\t> tmp-marks &&\n"> <"\tgit fast-export --import-marks=tmp-marks \\\n"> 
          <"\t\t--export-marks=tmp-marks master > /dev/null &&\n"> <"\tgit fast-export --import-marks=tmp-marks \\\n"> 
          <"\t\t--export-marks=tmp-marks master > actual &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"use refspec">)} 
      {
        (SQ <"\n"> <"\tgit fast-export --refspec refs/heads/master:refs/heads/foobar master | \\\n"> 
          <"\t\tgrep \"^commit \" | sort | uniq > actual &&\n"> <"\techo \"commit refs/heads/foobar\" > expected &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"delete refspec">)} 
      {
        (SQ <"\n"> <"\tgit branch to-delete &&\n"> 
          <"\tgit fast-export --refspec :refs/heads/to-delete to-delete ^to-delete > actual &&\n"> <"\tcat > expected <<-EOF &&\n"> <"\treset refs/heads/to-delete\n"> 
          <"\tfrom 0000000000000000000000000000000000000000\n"> <"\n"> <"\tEOF\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_done)})
  ]
)