(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'git fast-export'>)}
          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 "Áéí óú")\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'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<signed-tag-import>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 193
              stdin_parts: [
                <'tag sign-your-name\n'>
                <'from '>
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<git>} {<rev-parse>} {<HEAD>})
                )
                <'\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_fork: T
    )
    (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'>
        )
      }
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_NAME)
                  op: assign_op.Equal
                  rhs: {(SQ <'A U Thor'>)}
                  spids: [327]
                )
              ]
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<export>} {<GIT_AUTHOR_NAME>})
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_NAME)
                  op: assign_op.Equal
                  rhs: {(SQ <'C O Mitter'>)}
                  spids: [337]
                )
              ]
            )
          terminator: <Id.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'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tag-content>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 445
              stdin_parts: [
                <'object '>
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<git>} {<rev-parse>} {<HEAD>})
                )
                <'\n'>
                <'type commit\n'>
                <'tag rosten\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (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'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {<'limit-by-paths/expected'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 520
              stdin_parts: [
                <'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_fork: T
    )
    (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'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_DGreat '>>'>
          loc: (redir_loc.Fd fd:1)
          arg: {<'limit-by-paths/expected'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 555
              stdin_parts: [
                <'tag mytag\n'>
                <'from :2\n'>
                <'tagger C O Mitter <committer@example.com> 1112912713 -0700\n'>
                <'data 4\n'>
                <'msg\n'>
                <'\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (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'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {<'limit-by-paths/expected'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 604
              stdin_parts: [
                <'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_fork: T
    )
    (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'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 830
              stdin_parts: [
                <'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_fork: T
    )
    (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'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 867
              stdin_parts: [<'reset refs/heads/master\n'> <'from :14\n'> <'\n'>]
            )
        )
      ]
      do_fork: T
    )
    (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>})
  ]
)