(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]} ) )