(List (FunctionDef create_lib_submodule_repo [] (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS init]} {[LIT_CHARS submodule_update_repo]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[LIT_CHARS submodule_update_repo]}) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS expect]]} < (FilenameRedirectNode filename={[LIT_CHARS .gitignore]} >"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS actual]]} < (FilenameRedirectNode filename={[LIT_CHARS .gitignore]} >"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS x]]} < (FilenameRedirectNode filename={[LIT_CHARS file1]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS y]]} < (FilenameRedirectNode filename={[LIT_CHARS file2]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS .gitignore]} {[LIT_CHARS file1]} {[LIT_CHARS file2]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS Base]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS branch]} {[DQ [LIT_CHARS no_submodule]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[DQ [LIT_CHARS add_sub1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS submodule]} {[LIT_CHARS add]} {[LIT_CHARS ./.]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS -f]} {[LIT_CHARS .gitmodules]} {[LIT_CHARS submodule.sub1.ignore]} {[LIT_CHARS all]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS submodule.sub1.ignore]} {[LIT_CHARS all]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS .gitmodules]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "Add sub1"]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[LIT_CHARS remove_sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS revert]} {[LIT_CHARS HEAD]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[DQ [LIT_CHARS modify_sub1]]} {[DQ [LIT_CHARS add_sub1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS submodule]} {[LIT_CHARS update]}) (AndOr OP_AND_IF (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS fetch]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[DQ [LIT_CHARS modifications]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS z]]} < (FilenameRedirectNode filename={[LIT_CHARS file2]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS x]]} < (FilenameRedirectNode filename={[LIT_CHARS file3]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS file2]} {[LIT_CHARS file3]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "modified file2 and added file3"]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS push]} {[LIT_CHARS origin]} {[LIT_CHARS modifications]}) ) ) ) ) ) ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "Modify sub1"]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[DQ [LIT_CHARS replace_sub1_with_directory]]} {[DQ [LIT_CHARS add_sub1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS submodule]} {[LIT_CHARS update]}) (AndOr OP_AND_IF (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[LIT_CHARS sub1]}) (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS modifications]}) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS rm]} {[LIT_CHARS --cached]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS sub1/.git] [LIT_OTHER "*"]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS -f]} {[LIT_CHARS .gitmodules]} {[LIT_CHARS --remove-section]} {[DQ [LIT_CHARS submodule.sub1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS .gitmodules]} {[LIT_CHARS sub1/] [LIT_OTHER "*"]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "Replace sub1 with directory"]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[LIT_CHARS replace_directory_with_sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS revert]} {[LIT_CHARS HEAD]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[DQ [LIT_CHARS replace_sub1_with_file]]} {[DQ [LIT_CHARS add_sub1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS rm]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS content]]} < (FilenameRedirectNode filename={[LIT_CHARS sub1]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "Replace sub1 with file"]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[LIT_CHARS replace_file_with_sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS revert]} {[LIT_CHARS HEAD]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[DQ [LIT_CHARS invalid_sub1]]} {[DQ [LIT_CHARS add_sub1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --cacheinfo]} {[LIT_CHARS 160000]} {[LIT_CHARS 0123456789012345678901234567890123456789]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "Invalid sub1 commit"]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -b]} {[LIT_CHARS valid_sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS revert]} {[LIT_CHARS HEAD]}) (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS master]}) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) (FunctionDef replace_gitfile_with_git_dir [] (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [VarSub 1]]}) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('git_dir', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --git-dir]})]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS .git]}) (AndOr OP_AND_IF (Com {[LIT_CHARS cp]} {[LIT_CHARS -R]} {[DQ [VarSub git_dir]]} {[LIT_CHARS .git]}) (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --unset]} {[LIT_CHARS core.worktree]} more_env=[('GIT_WORK_TREE', {[LIT_CHARS .]})] ) ) ) ) ) ) ) (FunctionDef test_git_directory_is_unchanged [] (AndOr OP_AND_IF (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [LIT_CHARS .git/modules/][VarSub 1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS core.worktree]})]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS ../../../][VarSub 1]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --unset]} {[LIT_CHARS core.worktree]}) ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS diff]} {[LIT_CHARS -r]} {[DQ [LIT_CHARS .git/modules/][VarSub 1]]} {[DQ [VarSub 1][LIT_CHARS /.git]]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [LIT_CHARS .git/modules/][VarSub 1]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS core.worktree]} {[DQ [LIT_CHARS ../../../][VarSub 1]]}) ) ) ) ) ) (FunctionDef prolog [] (AndOr OP_AND_IF (Subshell (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[LIT_CHARS submodule_update_repo]}) (Com {[LIT_CHARS create_lib_submodule_repo]}) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test_config_global]} {[LIT_CHARS diff.ignoreSubmodules]} {[LIT_CHARS all]}) (Com {[LIT_CHARS test_config]} {[LIT_CHARS diff.ignoreSubmodules]} {[LIT_CHARS all]}) ) ) ) (FunctionDef reset_work_tree_to [] (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS submodule_update]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS clone]} {[LIT_CHARS submodule_update_repo]} {[LIT_CHARS submodule_update]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[LIT_CHARS submodule_update]}) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS sub1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[LIT_CHARS -f]} {[DQ [VarSub 1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS status]} {[LIT_CHARS -u]} {[LIT_CHARS -s]} < (FilenameRedirectNode filename={[LIT_CHARS actual]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS test_must_be_empty]} {[LIT_CHARS actual]}) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('sha1', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --revs-only]} {[LIT_CHARS HEAD] [LIT_OTHER ":"] [LIT_CHARS sub1]})]})]) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub sha1]]}) (Com {[LIT_CHARS test]} {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [LIT_CHARS sub1]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub sha1][LIT_CHARS "^{commit}"]]}) )]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS submodule]} {[LIT_CHARS update]} {[LIT_CHARS --init]} {[LIT_CHARS --recursive]} {[DQ [LIT_CHARS sub1]]}) ) ) ) ) ) ) ) ) ) ) ) (FunctionDef test_superproject_content [] (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS diff-index]} {[LIT_CHARS --cached]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[LIT_CHARS actual]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS test_must_be_empty]} {[LIT_CHARS actual]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS diff-files]} {[LIT_CHARS --ignore-submodules]} < (FilenameRedirectNode filename={[LIT_CHARS actual]} "> 1), > ) (Com {[LIT_CHARS test_must_be_empty]} {[LIT_CHARS actual]}) ) ) ) ) (FunctionDef test_submodule_content [] (AndOr OP_AND_IF (If (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 2]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "test_submodule_content needs two arguments"]]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('submodule', {[DQ [VarSub 1]]})]) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('commit', {[DQ [VarSub 2]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub submodule]] [LIT_CHARS /]}) (AndOr OP_AND_IF (If (AndOr OP_AND_IF (Pipeline! (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub submodule]] [LIT_CHARS /.git]}) ) (Pipeline! (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub submodule]] [LIT_CHARS /.git]}) ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Submodule "][VarSub submodule][LIT_CHARS " is not populated"]]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('sha1', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub commit][LIT_CHARS ":"][VarSub submodule]]})]})]) (AndOr OP_AND_IF (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub sha1]]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Couldn't retrieve SHA-1 of "][VarSub submodule][LIT_CHARS " for "][VarSub commit]]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [VarSub submodule]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS status]} {[LIT_CHARS -u]} {[LIT_CHARS -s]} < (FilenameRedirectNode filename={[LIT_CHARS actual]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS test_must_be_empty]} {[LIT_CHARS actual]}) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS diff]} {[DQ [VarSub sha1]]} < (FilenameRedirectNode filename={[LIT_CHARS actual]} "> 1), > ) (Com {[LIT_CHARS test_must_be_empty]} {[LIT_CHARS actual]}) ) ) ) ) ) ) ) ) ) ) ) ) ) (FunctionDef test_submodule_switch [] (List (= scope= flags=0 words=[] bindings=[('command', {[DQ [VarSub 1]]})]) (If (Com {[LIT_CHARS test]} {[DQ [VarSub KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES]]} {[LIT_OTHER "="]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS failure]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS success]]})]) ) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": added submodule creates empty directory"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": added submodule leaves existing empty directory alone"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": added submodule doesn't remove untracked unignored file with same name"]]} {[SQ sub1 &&\n"> ]}) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": replace tracked file with submodule creates empty directory"]]} {[SQ ]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR]]} {[LIT_OTHER "="]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS failure]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS success]]})]) ) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": replace directory with submodule"]]} {[SQ ]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES]]} {[LIT_OTHER "="]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS failure]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS success]]})]) ) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": removed submodule leaves submodule directory and its contents in place"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": removed submodule leaves submodule containing a .git directory alone"]]} {[SQ ]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES]]} {[LIT_OTHER "="]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS failure]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS success]]})]) ) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": replace submodule with a directory must fail"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": replace submodule containing a .git directory with a directory must fail"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_failure]} {[DQ [VarSub command][LIT_CHARS ": replace submodule with a file must fail"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_failure]} {[DQ [VarSub command][LIT_CHARS ": replace submodule containing a .git directory with a file must fail"]]} {[SQ ]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT]]} {[LIT_OTHER "="]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS failure]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [LIT_CHARS success]]})]) ) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": modified submodule does not update submodule work tree"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": modified submodule does not update submodule work tree to invalid commit"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_] [VarSub RESULT]} {[DQ [VarSub command][LIT_CHARS ": modified submodule does not update submodule work tree from invalid commit"]]} {[SQ ]}) ) ) (FunctionDef test_submodule_forced_switch [] (List (= scope= flags=0 words=[] bindings=[('command', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": added submodule creates empty directory"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": added submodule leaves existing empty directory alone"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": added submodule does remove untracked unignored file with same name when forced"]]} {[SQ sub1 &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": replace tracked file with submodule creates empty directory"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": replace directory with submodule"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": removed submodule leaves submodule directory and its contents in place"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": removed submodule leaves submodule containing a .git directory alone"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_failure]} {[DQ [VarSub command][LIT_CHARS ": replace submodule with a directory must fail"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_failure]} {[DQ [VarSub command][LIT_CHARS ": replace submodule containing a .git directory with a directory must fail"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_failure]} {[DQ [VarSub command][LIT_CHARS ": replace submodule with a file must fail"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_failure]} {[DQ [VarSub command][LIT_CHARS ": replace submodule containing a .git directory with a file must fail"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": modified submodule does not update submodule work tree"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": modified submodule does not update submodule work tree to invalid commit"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub command][LIT_CHARS ": modified submodule does not update submodule work tree from invalid commit"]]} {[SQ ]}) ) ) )