#!/bin/sh global test_description := ''Test ls-files recurse-submodules feature This test verifies the recurse-submodules feature correctly lists files from submodules. '' source ./test-lib.sh test_expect_success 'setup directory structure and submodules' ' echo a >a && mkdir b && echo b >b/b && git add a b && git commit -m "add a and b" && git init submodule && echo c >submodule/c && git -C submodule add c && git -C submodule commit -m "add c" && git submodule add ./submodule && git commit -m "added submodule" ' test_expect_success 'ls-files correctly outputs files in submodule' ' cat >expect <<-\EOF && .gitmodules a b/b submodule/c EOF git ls-files --recurse-submodules >actual && test_cmp expect actual ' test_expect_success 'ls-files correctly outputs files in submodule with -z' ' lf_to_nul >expect <<-\EOF && .gitmodules a b/b submodule/c EOF git ls-files --recurse-submodules -z >actual && test_cmp expect actual ' test_expect_success 'ls-files does not output files not added to a repo' ' cat >expect <<-\EOF && .gitmodules a b/b submodule/c EOF echo a >not_added && echo b >b/not_added && echo c >submodule/not_added && git ls-files --recurse-submodules >actual && test_cmp expect actual ' test_expect_success 'ls-files recurses more than 1 level' ' cat >expect <<-\EOF && .gitmodules a b/b submodule/.gitmodules submodule/c submodule/subsub/d EOF git init submodule/subsub && echo d >submodule/subsub/d && git -C submodule/subsub add d && git -C submodule/subsub commit -m "add d" && git -C submodule submodule add ./subsub && git -C submodule commit -m "added subsub" && git ls-files --recurse-submodules >actual && test_cmp expect actual ' test_expect_success '--recurse-submodules and pathspecs setup' ' echo e >submodule/subsub/e.txt && git -C submodule/subsub add e.txt && git -C submodule/subsub commit -m "adding e.txt" && echo f >submodule/f.TXT && echo g >submodule/g.txt && git -C submodule add f.TXT g.txt && git -C submodule commit -m "add f and g" && echo h >h.txt && mkdir sib && echo sib >sib/file && git add h.txt sib/file && git commit -m "add h and sib/file" && git init sub && echo sub >sub/file && git -C sub add file && git -C sub commit -m "add file" && git submodule add ./sub && git commit -m "added sub" && cat >expect <<-\EOF && .gitmodules a b/b h.txt sib/file sub/file submodule/.gitmodules submodule/c submodule/f.TXT submodule/g.txt submodule/subsub/d submodule/subsub/e.txt EOF git ls-files --recurse-submodules >actual && test_cmp expect actual && cat actual && git ls-files --recurse-submodules "*" >actual && test_cmp expect actual ' test_expect_success '--recurse-submodules and pathspecs' ' cat >expect <<-\EOF && h.txt submodule/g.txt submodule/subsub/e.txt EOF git ls-files --recurse-submodules "*.txt" >actual && test_cmp expect actual ' test_expect_success '--recurse-submodules and pathspecs' ' cat >expect <<-\EOF && h.txt submodule/f.TXT submodule/g.txt submodule/subsub/e.txt EOF git ls-files --recurse-submodules ":(icase)*.txt" >actual && test_cmp expect actual ' test_expect_success '--recurse-submodules and pathspecs' ' cat >expect <<-\EOF && h.txt submodule/f.TXT submodule/g.txt EOF git ls-files --recurse-submodules ":(icase)*.txt" ":(exclude)submodule/subsub/*" >actual && test_cmp expect actual ' test_expect_success '--recurse-submodules and pathspecs' ' cat >expect <<-\EOF && sub/file EOF git ls-files --recurse-submodules "sub" >actual && test_cmp expect actual && git ls-files --recurse-submodules "sub/" >actual && test_cmp expect actual && git ls-files --recurse-submodules "sub/file" >actual && test_cmp expect actual && git ls-files --recurse-submodules "su*/file" >actual && test_cmp expect actual && git ls-files --recurse-submodules "su?/file" >actual && test_cmp expect actual ' test_expect_success '--recurse-submodules and pathspecs' ' cat >expect <<-\EOF && sib/file sub/file EOF git ls-files --recurse-submodules "s??/file" >actual && test_cmp expect actual && git ls-files --recurse-submodules "s???file" >actual && test_cmp expect actual && git ls-files --recurse-submodules "s*file" >actual && test_cmp expect actual ' test_expect_success '--recurse-submodules does not support --error-unmatch' ' test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual && test_i18ngrep "does not support --error-unmatch" actual ' proc test_incompatible_with_recurse_submodules { test_expect_success "--recurse-submodules and $1 are incompatible" " test_must_fail git ls-files --recurse-submodules $1 2>actual && test_i18ngrep 'unsupported mode' actual " } test_incompatible_with_recurse_submodules --deleted test_incompatible_with_recurse_submodules --modified test_incompatible_with_recurse_submodules --others test_incompatible_with_recurse_submodules --stage test_incompatible_with_recurse_submodules --killed test_incompatible_with_recurse_submodules --unmerged test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: { (SQ <"Test ls-files recurse-submodules feature\n"> <"\n"> <"This test verifies the recurse-submodules feature correctly lists files from\n"> <"submodules.\n"> ) } spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <"setup directory structure and submodules">)} { (SQ <"\n"> <"\techo a >a &&\n"> <"\tmkdir b &&\n"> <"\techo b >b/b &&\n"> <"\tgit add a b &&\n"> <"\tgit commit -m \"add a and b\" &&\n"> <"\tgit init submodule &&\n"> <"\techo c >submodule/c &&\n"> <"\tgit -C submodule add c &&\n"> <"\tgit -C submodule commit -m \"add c\" &&\n"> <"\tgit submodule add ./submodule &&\n"> <"\tgit commit -m \"added submodule\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"ls-files correctly outputs files in submodule">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> <"\tsubmodule/c\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ls-files correctly outputs files in submodule with -z">)} { (SQ <"\n"> <"\tlf_to_nul >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> <"\tsubmodule/c\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules -z >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ls-files does not output files not added to a repo">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> <"\tsubmodule/c\n"> <"\tEOF\n"> <"\n"> <"\techo a >not_added &&\n"> <"\techo b >b/not_added &&\n"> <"\techo c >submodule/not_added &&\n"> <"\tgit ls-files --recurse-submodules >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ls-files recurses more than 1 level">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> <"\tsubmodule/.gitmodules\n"> <"\tsubmodule/c\n"> <"\tsubmodule/subsub/d\n"> <"\tEOF\n"> <"\n"> <"\tgit init submodule/subsub &&\n"> <"\techo d >submodule/subsub/d &&\n"> <"\tgit -C submodule/subsub add d &&\n"> <"\tgit -C submodule/subsub commit -m \"add d\" &&\n"> <"\tgit -C submodule submodule add ./subsub &&\n"> <"\tgit -C submodule commit -m \"added subsub\" &&\n"> <"\tgit ls-files --recurse-submodules >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs setup">)} { (SQ <"\n"> <"\techo e >submodule/subsub/e.txt &&\n"> <"\tgit -C submodule/subsub add e.txt &&\n"> <"\tgit -C submodule/subsub commit -m \"adding e.txt\" &&\n"> <"\techo f >submodule/f.TXT &&\n"> <"\techo g >submodule/g.txt &&\n"> <"\tgit -C submodule add f.TXT g.txt &&\n"> <"\tgit -C submodule commit -m \"add f and g\" &&\n"> <"\techo h >h.txt &&\n"> <"\tmkdir sib &&\n"> <"\techo sib >sib/file &&\n"> <"\tgit add h.txt sib/file &&\n"> <"\tgit commit -m \"add h and sib/file\" &&\n"> <"\tgit init sub &&\n"> <"\techo sub >sub/file &&\n"> <"\tgit -C sub add file &&\n"> <"\tgit -C sub commit -m \"add file\" &&\n"> <"\tgit submodule add ./sub &&\n"> <"\tgit commit -m \"added sub\" &&\n"> <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\t.gitmodules\n"> <"\ta\n"> <"\tb/b\n"> <"\th.txt\n"> <"\tsib/file\n"> <"\tsub/file\n"> <"\tsubmodule/.gitmodules\n"> <"\tsubmodule/c\n"> <"\tsubmodule/f.TXT\n"> <"\tsubmodule/g.txt\n"> <"\tsubmodule/subsub/d\n"> <"\tsubmodule/subsub/e.txt\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tcat actual &&\n"> <"\tgit ls-files --recurse-submodules \"*\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\th.txt\n"> <"\tsubmodule/g.txt\n"> <"\tsubmodule/subsub/e.txt\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules \"*.txt\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\th.txt\n"> <"\tsubmodule/f.TXT\n"> <"\tsubmodule/g.txt\n"> <"\tsubmodule/subsub/e.txt\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules \":(icase)*.txt\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\th.txt\n"> <"\tsubmodule/f.TXT\n"> <"\tsubmodule/g.txt\n"> <"\tEOF\n"> <"\n"> < "\tgit ls-files --recurse-submodules \":(icase)*.txt\" \":(exclude)submodule/subsub/*\" >actual &&\n" > <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tsub/file\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules \"sub\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"sub/\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"sub/file\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"su*/file\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"su?/file\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--recurse-submodules and pathspecs">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tsib/file\n"> <"\tsub/file\n"> <"\tEOF\n"> <"\n"> <"\tgit ls-files --recurse-submodules \"s??/file\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"s???file\" >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tgit ls-files --recurse-submodules \"s*file\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--recurse-submodules does not support --error-unmatch">)} { (SQ <"\n"> <"\ttest_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&\n"> <"\ttest_i18ngrep \"does not support --error-unmatch\" actual\n"> ) } ) (FuncDef name: test_incompatible_with_recurse_submodules body: (BraceGroup children: [ (C {(test_expect_success)} {(DQ ("--recurse-submodules and ") ($ VSub_Number "$1") (" are incompatible"))} { (DQ ("\n") ("\t\ttest_must_fail git ls-files --recurse-submodules ") ($ VSub_Number "$1") (" 2>actual &&\n") ("\t\ttest_i18ngrep 'unsupported mode' actual\n") ("\t") ) } ) ] spids: [304] ) spids: [299 303] ) (C {(test_incompatible_with_recurse_submodules)} {(--deleted)}) (C {(test_incompatible_with_recurse_submodules)} {(--modified)}) (C {(test_incompatible_with_recurse_submodules)} {(--others)}) (C {(test_incompatible_with_recurse_submodules)} {(--stage)}) (C {(test_incompatible_with_recurse_submodules)} {(--killed)}) (C {(test_incompatible_with_recurse_submodules)} {(--unmerged)}) (C {(test_done)}) ] )