(List
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('test_description', {[SQ <LIT_CHARS "Summary support for submodules\n"> <LIT_CHARS "\n"> <LIT_CHARS "This test tries to verify the sanity of summary subcommand of git submodule.\n">]})])
  (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]}  )
  (FunctionDef add_file []
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('sm', {[VarSub 1]})])
      (Com {[LIT_CHARS shift]}      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('owd', {[ComSub (Com {[LIT_CHARS pwd]})]})])
      (Com {[LIT_CHARS cd]} {[DQ [VarSub sm]]}      )
      (For name do_arg_iter)
        (AndOr OP_AND_IF
          (Com {[LIT_CHARS echo]} {[DQ [VarSub name]]}
            <
            (FilenameRedirectNode filename={[DQ [VarSub name]]} <REDIR_GREAT ">"> 1),
            >
          )
          (AndOr OP_AND_IF
            (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[DQ [VarSub name]]}            )
            (AndOr OP_AND_IF
              (Com {[LIT_CHARS test_tick]}              )
              (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "Add "][VarSub name]]}              )
            )
          )
        )
      )
      (Pipeline
        (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]}        )
        (Com {[LIT_CHARS cut]} {[LIT_CHARS -c1-7]}        )
      )
      (Com {[LIT_CHARS cd]} {[DQ [VarSub owd]]}      )
    )
  )
  (FunctionDef commit_file []
    (AndOr OP_AND_IF
      (Com {[LIT_CHARS test_tick]}      )
      (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[DQ [VarSub @]]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "Commit "][VarSub *]]}
        <
        (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} <REDIR_GREAT ">"> 1),
        >
      )
    )
  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS test_create_repo]} {[LIT_CHARS sm1]}    )
    (Com {[LIT_CHARS add_file]} {[LIT_CHARS .]} {[LIT_CHARS foo]}
      <
      (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} <REDIR_GREAT ">"> 1),
      >
    )
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head1', {[ComSub (Com {[LIT_CHARS add_file]} {[LIT_CHARS sm1]} {[LIT_CHARS foo1]} {[LIT_CHARS foo2]})]})])
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "added submodule">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "\tgit add sm1 &&\n"][LIT_CHARS "\tgit submodule summary >actual &&\n"][LIT_CHARS "\tcat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 0000000..."][VarSub head1][LIT_CHARS " (2):\n"][LIT_CHARS "  > Add foo2\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "\ttest_cmp expected actual\n"]]}  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS commit_file]} {[LIT_CHARS sm1]}    )
    (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head2', {[ComSub (Com {[LIT_CHARS add_file]} {[LIT_CHARS sm1]} {[LIT_CHARS foo3]})]})])
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "modified submodule(forward)">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "\tgit submodule summary >actual &&\n"][LIT_CHARS "\tcat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head1][LIT_CHARS ...][VarSub head2][LIT_CHARS " (1):\n"][LIT_CHARS "  > Add foo3\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "\ttest_cmp expected actual\n"]]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "modified submodule(forward), --files">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "\tgit submodule summary --files >actual &&\n"][LIT_CHARS "\tcat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head1][LIT_CHARS ...][VarSub head2][LIT_CHARS " (1):\n"][LIT_CHARS "  > Add foo3\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "\ttest_cmp expected actual\n"]]}  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS commit_file]} {[LIT_CHARS sm1]}    )
    (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head3', {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[LIT_CHARS sm1]}) (AndOr OP_AND_IF (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} <REDIR_GREAT ">"> 1)]{[LIT_CHARS git]} {[LIT_CHARS reset]} {[LIT_CHARS --hard]} {[LIT_CHARS HEAD] [LIT_TILDE "~"] [LIT_CHARS 2]}) (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -c1-7]}) ) ) )]})])
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "modified submodule(backward)">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head2][LIT_CHARS ...][VarSub head3][LIT_CHARS " (2):\n"][LIT_CHARS "  < Add foo3\n"][LIT_CHARS "  < Add foo2\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "\ttest_cmp expected actual\n"]]}  )
  (AndOr OP_AND_IF
    (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head4', {[ComSub (Com {[LIT_CHARS add_file]} {[LIT_CHARS sm1]} {[LIT_CHARS foo4]} {[LIT_CHARS foo5]})]})])
    (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head4_full', {[ComSub (Com more_env=[('GIT_DIR', {[LIT_CHARS sm1/.git]})] {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]})]})])
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "modified submodule(backward and forward)">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head2][LIT_CHARS ...][VarSub head4][LIT_CHARS " (4):\n"][LIT_CHARS "  > Add foo5\n"][LIT_CHARS "  > Add foo4\n"][LIT_CHARS "  < Add foo3\n"][LIT_CHARS "  < Add foo2\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "\ttest_cmp expected actual\n"]]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS --summary-limit>]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary -n 3 >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head2][LIT_CHARS ...][VarSub head4][LIT_CHARS " (4):\n"][LIT_CHARS "  > Add foo5\n"][LIT_CHARS "  > Add foo4\n"][LIT_CHARS "  < Add foo3\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_cmp expected actual\n"]]}  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS commit_file]} {[LIT_CHARS sm1]}    )
    (AndOr OP_AND_IF
      (Com {[LIT_CHARS mv]} {[LIT_CHARS sm1]} {[LIT_CHARS sm1-bak]}      )
      (AndOr OP_AND_IF
        (Com {[LIT_CHARS echo]} {[LIT_CHARS sm1]}
          <
          (FilenameRedirectNode filename={[LIT_CHARS sm1]} <REDIR_GREAT ">"> 1),
          >
        )
        (AndOr OP_AND_IF
          (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head5', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS hash-object]} {[LIT_CHARS sm1]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -c1-7]}) )]})])
          (AndOr OP_AND_IF
            (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS sm1]}            )
            (AndOr OP_AND_IF
              (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS sm1]}              )
              (Com {[LIT_CHARS mv]} {[LIT_CHARS sm1-bak]} {[LIT_CHARS sm1]}              )
            )
          )
        )
      )
    )
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "typechanged submodule(submodule->blob), --cached">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary --cached >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head4][LIT_CHARS "(submodule)->"][VarSub head5][LIT_CHARS "(blob) (3):\n"][LIT_CHARS "  < Add foo5\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "\ttest_i18ncmp actual expected\n"]]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "typechanged submodule(submodule->blob), --files">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary --files >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head5][LIT_CHARS "(blob)->"][VarSub head4][LIT_CHARS "(submodule) (3):\n"][LIT_CHARS "  > Add foo5\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_i18ncmp actual expected\n"]]}  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS sm1]}    )
    (Com {[LIT_CHARS git]} {[LIT_CHARS checkout-index]} {[LIT_CHARS sm1]}    )
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "typechanged submodule(submodule->blob)">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head4][LIT_CHARS "(submodule)->"][VarSub head5][LIT_CHARS "(blob):\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_i18ncmp actual expected\n"]]}  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS sm1]}    )
    (AndOr OP_AND_IF
      (Com {[LIT_CHARS test_create_repo]} {[LIT_CHARS sm1]}      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head6', {[ComSub (Com {[LIT_CHARS add_file]} {[LIT_CHARS sm1]} {[LIT_CHARS foo6]} {[LIT_CHARS foo7]})]})])
    )
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "nonexistent commit">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head4][LIT_CHARS ...][VarSub head6][LIT_CHARS ":\n"][LIT_CHARS "  Warn: sm1 doesn't contain commit "][VarSub head4_full][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_i18ncmp actual expected\n"]]}  )
  (Com {[LIT_CHARS commit_file]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "typechanged submodule(blob->submodule)">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head5][LIT_CHARS "(blob)->"][VarSub head6][LIT_CHARS "(submodule) (2):\n"][LIT_CHARS "  > Add foo7\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_i18ncmp expected actual\n"]]}  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS commit_file]} {[LIT_CHARS sm1]}    )
    (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS sm1]}    )
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "deleted submodule">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head6][LIT_CHARS "...0000000:\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_cmp expected actual\n"]]}  )
  (AndOr OP_AND_IF
    (Com {[LIT_CHARS test_create_repo]} {[LIT_CHARS sm2]}    )
    (AndOr OP_AND_IF
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('head7', {[ComSub (Com {[LIT_CHARS add_file]} {[LIT_CHARS sm2]} {[LIT_CHARS foo8]} {[LIT_CHARS foo9]})]})])
      (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS sm2]}      )
    )
  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "multiple submodules">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head6][LIT_CHARS "...0000000:\n"][LIT_CHARS "\n"][LIT_CHARS "* sm2 0000000..."][VarSub head7][LIT_CHARS " (2):\n"][LIT_CHARS "  > Add foo9\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_cmp expected actual\n"]]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "path filter">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary sm2 >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm2 0000000..."][VarSub head7][LIT_CHARS " (2):\n"][LIT_CHARS "  > Add foo9\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_cmp expected actual\n"]]}  )
  (Com {[LIT_CHARS commit_file]} {[LIT_CHARS sm2]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "given commit">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary HEAD^ >actual &&\n"][LIT_CHARS "    cat >expected <<-EOF &&\n"][LIT_CHARS "* sm1 "][VarSub head6][LIT_CHARS "...0000000:\n"][LIT_CHARS "\n"][LIT_CHARS "* sm2 0000000..."][VarSub head7][LIT_CHARS " (2):\n"][LIT_CHARS "  > Add foo9\n"][LIT_CHARS "\n"][LIT_CHARS "EOF\n"][LIT_CHARS "    test_cmp expected actual\n"]]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS --for-status>]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git submodule summary --for-status HEAD^ >actual &&\n"][LIT_CHARS "    test_i18ncmp actual - <<EOF\n"][LIT_CHARS "# Submodule changes to be committed:\n"][LIT_CHARS "#\n"][LIT_CHARS "# * sm1 "][VarSub head6][LIT_CHARS "...0000000:\n"][LIT_CHARS "#\n"][LIT_CHARS "# * sm2 0000000..."][VarSub head7][LIT_CHARS " (2):\n"][LIT_CHARS "#   > Add foo9\n"][LIT_CHARS "#\n"][LIT_CHARS "EOF\n"]]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "fail when using --files together with --cached">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    test_must_fail git submodule summary --files --cached\n"]]}  )
  (Com {[LIT_CHARS test_expect_success]} {[SQ <LIT_CHARS "should not fail in an empty repo">]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "    git init xyzzy &&\n"][LIT_CHARS "    cd xyzzy &&\n"][LIT_CHARS "    git submodule summary >output 2>&1 &&\n"][LIT_CHARS "    test_cmp output /dev/null\n"]]}  )
  (Com {[LIT_CHARS test_done]}  )
)