(CommandList children: [ (FuncDef name: create_lib_submodule_repo body: (BraceGroup children: [ (AndOr children: [ (C {(git)} {(init)} {(submodule_update_repo)}) (Subshell child: (AndOr children: [ (C {(cd)} {(submodule_update_repo)}) (AndOr children: [ (SimpleCommand words: [{(echo)} {(DQ (expect))}] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {(.gitignore)} spids: [132] ) ] ) (AndOr children: [ (SimpleCommand words: [{(echo)} {(DQ (actual))}] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {(.gitignore)} spids: [144] ) ] ) (AndOr children: [ (SimpleCommand words: [{(echo)} {(DQ (x))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(file1)} spids: [156] ) ] ) (AndOr children: [ (SimpleCommand words: [{(echo)} {(DQ (y))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(file2)} spids: [168] ) ] ) (AndOr children: [ (C {(git)} {(add)} {(.gitignore)} {(file1)} {(file2)}) (AndOr children: [ (C {(git)} {(commit)} {(-m)} {(DQ (Base))}) (AndOr children: [ (C {(git)} {(branch)} {(DQ (no_submodule))}) (AndOr children: [ (C {(git)} {(checkout)} {(-b)} {(DQ (add_sub1))}) (AndOr children: [ (C {(git)} {(submodule)} {(add)} {(./.)} {(sub1)} ) (AndOr children: [ (C {(git)} {(config)} {(-f)} {(.gitmodules)} {(submodule.sub1.ignore)} {(all)} ) (AndOr children: [ (C {(git)} {(config)} {(submodule.sub1.ignore)} {(all)} ) (AndOr children: [ (C {(git)} {(add)} {(.gitmodules)} ) (AndOr children: [ (C {(git)} {(commit)} {(-m)} {(DQ ("Add sub1"))} ) (AndOr children: [ (C {(git)} {(checkout)} {(-b)} {(remove_sub1)} ) (AndOr children: [ (C {(git)} {(revert)} {(HEAD)} ) (AndOr children: [ (C {(git)} { ( checkout ) } {(-b)} {(DQ (modify_sub1))} {(DQ (add_sub1))} ) (AndOr children: [ (C {(git)} { ( submodule ) } {(update)} ) (AndOr children: [ (Subshell child: (AndOr children: [ (C { ( cd ) } {(sub1)} ) (AndOr children: [ (C { ( git ) } {(fetch)} ) (AndOr children: [ (C { ( git ) } {(checkout)} {(-b)} {(DQ (modifications))} ) (AndOr children: [ (SimpleCommand words: [ { ( echo ) } { (DQ ( z ) ) } ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: { ( file2 ) } spids: [ 369 ] ) ] ) (AndOr children: [ (SimpleCommand words: [ { ( echo ) } { (DQ ( x ) ) } ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: { ( file3 ) } spids: [ 381 ] ) ] ) (AndOr children: [ (C { ( git ) } {(add)} {(file2)} {(file3)} ) (AndOr children: [ (C { ( git ) } {(commit)} {(-m)} {(DQ ("modified file2 and added file3"))} ) (C { ( git ) } {(push)} {(origin)} {(modifications)} ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [ 333 420 ] ) (AndOr children: [ (C { ( git ) } {(add)} {(sub1)} ) (AndOr children: [ (C { ( git ) } {(commit)} {(-m)} {(DQ ("Modify sub1"))} ) (AndOr children: [ (C { ( git ) } {(checkout)} {(-b)} {(DQ (replace_sub1_with_directory))} {(DQ (add_sub1))} ) (AndOr children: [ (C { ( git ) } {(submodule)} {(update)} ) (AndOr children: [ (Subshell child: (AndOr children: [ (C { ( cd ) } {(sub1)} ) (C { ( git ) } {(checkout)} {(modifications)} ) ] op_id: Op_DAmp ) spids: [ 474 491 ] ) (AndOr children: [ (C { ( git ) } {(rm)} {(--cached)} {(sub1)} ) (AndOr children: [ (C { ( rm ) } {(sub1/.git) (Lit_Other "*")} ) (AndOr children: [ (C { ( git ) } {(config)} {(-f)} {(.gitmodules)} {(--remove-section)} {(DQ (submodule.sub1))} ) (AndOr children: [ (C { ( git ) } {(add)} {(.gitmodules)} {(sub1/) (Lit_Other "*")} ) (AndOr children: [ (C { ( git ) } {(commit)} {(-m)} {(DQ ("Replace sub1 with directory"))} ) (AndOr children: [ (C { ( git ) } {(checkout)} {(-b)} {(replace_directory_with_sub1)} ) (AndOr children: [ (C { ( git ) } {(revert)} {(HEAD)} ) (AndOr children: [ (C { ( git ) } {(checkout)} {(-b)} {(DQ (replace_sub1_with_file))} {(DQ (add_sub1))} ) (AndOr children: [ (C { ( git ) } {(rm)} {(sub1)} ) (AndOr children: [ (SimpleCommand words: [ { ( echo ) } { (DQ ( content ) ) } ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: { ( sub1 ) } spids: [ 610 ] ) ] ) (AndOr children: [ (C { ( git ) } {(add)} {(sub1)} ) (AndOr children: [ (C { ( git ) } {(commit)} {(-m)} {(DQ ("Replace sub1 with file"))} ) (AndOr children: [ (C { ( git ) } {(checkout)} {(-b)} {(replace_file_with_sub1)} ) (AndOr children: [ (C { ( git ) } {(revert)} {(HEAD)} ) (AndOr children: [ (C { ( git ) } {(checkout)} {(-b)} {(DQ (invalid_sub1))} {(DQ (add_sub1))} ) (AndOr children: [ (C { ( git ) } {(update-index)} {(--cacheinfo)} {(160000)} {(0123456789012345678901234567890123456789)} {(sub1)} ) (AndOr children: [ (C { ( git ) } {(commit)} {(-m)} {(DQ ("Invalid sub1 commit"))} ) (AndOr children: [ (C { ( git ) } {(checkout)} {(-b)} {(valid_sub1)} ) (AndOr children: [ (C { ( git ) } {(revert)} {(HEAD)} ) (C { ( git ) } {(checkout)} {(master)} ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [116 731] ) ] op_id: Op_DAmp ) ] spids: [104] ) spids: [99 103] ) (FuncDef name: replace_gitfile_with_git_dir body: (BraceGroup children: [ (Subshell child: (AndOr children: [ (C {(cd)} {(DQ ($ VSub_Number "$1"))}) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:git_dir) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(git)} {(rev-parse)} {(--git-dir)})] ) left_token: <Left_CommandSub "$("> spids: [761 767] ) ) } spids: [759] ) ] spids: [759] ) (AndOr children: [ (C {(rm)} {(-f)} {(.git)}) (AndOr children: [ (C {(cp)} {(-R)} {(DQ ($ VSub_Name "$git_dir"))} {(.git)}) (SimpleCommand words: [{(git)} {(config)} {(--unset)} {(core.worktree)}] more_env: [(env_pair name:GIT_WORK_TREE val:{(.)} spids:[795])] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [747 807] ) ] spids: [744] ) spids: [739 743] ) (FuncDef name: test_git_directory_is_unchanged body: (BraceGroup children: [ (AndOr children: [ (Subshell child: (AndOr children: [ (C {(cd)} {(DQ (.git/modules/) ($ VSub_Number "$1"))}) (AndOr children: [ (C {(test)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(git)} {(config)} {(core.worktree)})] ) left_token: <Left_CommandSub "$("> spids: [861 867] ) ) } {(Lit_Other "=")} {(DQ (../../../) ($ VSub_Number "$1"))} ) (C {(git)} {(config)} {(--unset)} {(core.worktree)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [841 897] ) (AndOr children: [ (C {(diff)} {(-r)} {(DQ (.git/modules/) ($ VSub_Number "$1"))} {(DQ ($ VSub_Number "$1") (/.git))} ) (Subshell child: (AndOr children: [ (C {(cd)} {(DQ (.git/modules/) ($ VSub_Number "$1"))}) (C {(git)} {(config)} {(core.worktree)} {(DQ (../../../) ($ VSub_Number "$1"))} ) ] op_id: Op_DAmp ) spids: [919 948] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [838] ) spids: [833 837] ) (FuncDef name: prolog body: (BraceGroup children: [ (AndOr children: [ (Subshell child: (AndOr children: [ (C {(test)} {(-d)} {(submodule_update_repo)}) (C {(create_lib_submodule_repo)}) ] op_id: Op_DPipe ) spids: [970 980] ) (AndOr children: [ (C {(test_config_global)} {(diff.ignoreSubmodules)} {(all)}) (C {(test_config)} {(diff.ignoreSubmodules)} {(all)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [967] ) spids: [962 966] ) (FuncDef name: reset_work_tree_to body: (BraceGroup children: [ (AndOr children: [ (C {(rm)} {(-rf)} {(submodule_update)}) (AndOr children: [ (C {(git)} {(clone)} {(submodule_update_repo)} {(submodule_update)}) (Subshell child: (AndOr children: [ (C {(cd)} {(submodule_update)}) (AndOr children: [ (C {(rm)} {(-rf)} {(sub1)}) (AndOr children: [ (C {(git)} {(checkout)} {(-f)} {(DQ ($ VSub_Number "$1"))}) (AndOr children: [ (SimpleCommand words: [{(git)} {(status)} {(-u)} {(-s)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(actual)} spids: [1080] ) ] ) (AndOr children: [ (C {(test_must_be_empty)} {(actual)}) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sha1) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--revs-only)} {(HEAD) (Lit_Other ":") (sub1)} ) ] ) left_token: <Left_CommandSub "$("> spids: [1094 1104] ) } spids: [1093] ) ] spids: [1093] ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$sha1"))} ) (C {(test)} { (CommandSubPart command_list: (CommandList children: [ (AndOr children: [ (C {(cd)} {(DQ (sub1))}) (C {(git)} {(rev-parse)} {(--verify)} {(DQ ($ VSub_Name "$sha1") ("^{commit}"))} ) ] op_id: Op_DAmp ) ] ) left_token: <Left_CommandSub "$("> spids: [1124 1143] ) } ) ] op_id: Op_DAmp ) ] action: [ (C {(git)} {(submodule)} {(update)} {(--init)} {(--recursive)} {(DQ (sub1))} ) ] spids: [-1 1146] ) ] spids: [-1 1164] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [1040 1167] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [1017] ) spids: [1012 1016] ) (FuncDef name: test_superproject_content body: (BraceGroup children: [ (AndOr children: [ (SimpleCommand words: [{(git)} {(diff-index)} {(--cached)} {(DQ ($ VSub_Number "$1"))}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(actual)} spids:[1199])] ) (AndOr children: [ (C {(test_must_be_empty)} {(actual)}) (AndOr children: [ (SimpleCommand words: [{(git)} {(diff-files)} {(--ignore-submodules)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(actual)} spids: [1218] ) ] ) (C {(test_must_be_empty)} {(actual)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [1186] ) spids: [1181 1185] ) (FuncDef name: test_submodule_content body: (BraceGroup children: [ (AndOr children: [ (If arms: [ (if_arm cond: [(C {(test)} {($ VSub_Pound "$#")} {(KW_Bang "!") (Lit_Other "=")} {(2)})] action: [ (C {(echo)} {(DQ ("test_submodule_content needs two arguments"))}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] spids: [-1 1257] ) ] spids: [-1 1272] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:submodule) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1277] ) ] spids: [1277] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:commit) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [1285] ) ] spids: [1285] ) (AndOr children: [ (C {(test)} {(-d)} {(DQ ($ VSub_Name "$submodule")) (/)}) (AndOr children: [ (If arms: [ (if_arm cond: [ (AndOr children: [ (Pipeline children: [ (C {(test)} {(-f)} {(DQ ($ VSub_Name "$submodule")) (/.git)} ) ] negated: True ) (Pipeline children: [ (C {(test)} {(-d)} {(DQ ($ VSub_Name "$submodule")) (/.git)} ) ] negated: True ) ] op_id: Op_DAmp ) ] action: [ (C {(echo)} { (DQ ("Submodule ") ($ VSub_Name "$submodule") (" is not populated") ) } ) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] spids: [-1 1332] ) ] spids: [-1 1349] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sha1) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} { (DQ ($ VSub_Name "$commit") (":") ($ VSub_Name "$submodule") ) } ) ] ) left_token: <Left_CommandSub "$("> spids: [1355 1367] ) } spids: [1354] ) ] spids: [1354] ) (AndOr children: [ (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$sha1"))})] action: [ (C {(echo)} { (DQ ("Couldn't retrieve SHA-1 of ") ($ VSub_Name "$submodule") (" for ") ($ VSub_Name "$commit") ) } ) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] spids: [-1 1383] ) ] spids: [-1 1401] ) (Subshell child: (AndOr children: [ (C {(cd)} {(DQ ($ VSub_Name "$submodule"))}) (AndOr children: [ (SimpleCommand words: [{(git)} {(status)} {(-u)} {(-s)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(actual)} spids: [1426] ) ] ) (AndOr children: [ (C {(test_must_be_empty)} {(actual)}) (AndOr children: [ (SimpleCommand words: [ {(git)} {(diff)} {(DQ ($ VSub_Name "$sha1"))} ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(actual)} spids: [1447] ) ] ) (C {(test_must_be_empty)} {(actual)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [1406 1458] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [1242] ) spids: [1237 1241] ) (FuncDef name: test_submodule_switch body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:command) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1526] ) ] spids: [1526] ) (If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Name "$KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES"))} {(Lit_Other "=")} {(1)} ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (failure))} spids: [1560] ) ] spids: [1560] ) ] spids: [-1 1553] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (success))} spids: [1569] ) ] spids: [1569] ) ] spids: [1566 1575] ) (C {(test_expect_) ($ VSub_Name "$RESULT")} {(DQ ($ VSub_Name "$command") (": added submodule creates empty directory"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to no_submodule &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n"> <"\t\t\t$command add_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": added submodule leaves existing empty directory alone") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to no_submodule &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tmkdir sub1 &&\n"> <"\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n"> <"\t\t\t$command add_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": added submodule doesn't remove untracked unignored file with same name") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to no_submodule &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n"> <"\t\t\t>sub1 &&\n"> <"\t\t\ttest_must_fail $command add_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/no_submodule &&\n"> <"\t\t\ttest_must_be_empty sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": replace tracked file with submodule creates empty directory") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to replace_sub1_with_file &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&\n"> <"\t\t\t$command replace_file_with_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/replace_file_with_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/replace_file_with_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (If arms: [ (if_arm cond: [ (C {(test)} { (DQ ($ VSub_Name "$KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR") ) } {(Lit_Other "=")} {(1)} ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (failure))} spids: [1729] ) ] spids: [1729] ) ] spids: [-1 1714] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (success))} spids: [1738] ) ] spids: [1738] ) ] spids: [1735 1744] ) (C {(test_expect_) ($ VSub_Name "$RESULT")} {(DQ ($ VSub_Name "$command") (": replace directory with submodule"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to replace_sub1_with_directory &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> < "\t\t\tgit branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&\n" > <"\t\t\t$command replace_directory_with_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/replace_directory_with_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/replace_directory_with_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Name "$KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES"))} {(Lit_Other "=")} {(1)} ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (failure))} spids: [1797] ) ] spids: [1797] ) ] spids: [-1 1794] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (success))} spids: [1806] ) ] spids: [1806] ) ] spids: [1803 1812] ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": removed submodule leaves submodule directory and its contents in place") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n"> <"\t\t\t$command remove_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/remove_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": removed submodule leaves submodule containing a .git directory alone") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n"> <"\t\t\treplace_gitfile_with_git_dir sub1 &&\n"> <"\t\t\t$command remove_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/remove_sub1 &&\n"> <"\t\t\ttest_git_directory_is_unchanged sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (If arms: [ (if_arm cond: [ (C {(test)} { (DQ ($ VSub_Name "$KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES" ) ) } {(Lit_Other "=")} {(1)} ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (failure))} spids: [1903] ) ] spids: [1903] ) ] spids: [-1 1888] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (success))} spids: [1912] ) ] spids: [1912] ) ] spids: [1909 1918] ) (C {(test_expect_) ($ VSub_Name "$RESULT")} {(DQ ($ VSub_Name "$command") (": replace submodule with a directory must fail"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": replace submodule containing a .git directory with a directory must fail") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n"> <"\t\t\treplace_gitfile_with_git_dir sub1 &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_git_directory_is_unchanged sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_failure)} {(DQ ($ VSub_Name "$command") (": replace submodule with a file must fail"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_file &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_failure)} { (DQ ($ VSub_Name "$command") (": replace submodule containing a .git directory with a file must fail") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n"> <"\t\t\treplace_gitfile_with_git_dir sub1 &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_file &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_git_directory_is_unchanged sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Name "$KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT"))} {(Lit_Other "=")} {(1)} ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (failure))} spids: [2072] ) ] spids: [2072] ) ] spids: [-1 2057] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (success))} spids: [2081] ) ] spids: [2081] ) ] spids: [2078 2087] ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": modified submodule does not update submodule work tree") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t modify_sub1 origin/modify_sub1 &&\n"> <"\t\t\t$command modify_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/modify_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n"> <"\t\t\tgit submodule update &&\n"> <"\t\t\ttest_submodule_content sub1 origin/modify_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": modified submodule does not update submodule work tree to invalid commit") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t invalid_sub1 origin/invalid_sub1 &&\n"> <"\t\t\t$command invalid_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/invalid_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n"> <"\t\t\ttest_must_fail git submodule update &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_) ($ VSub_Name "$RESULT")} { (DQ ($ VSub_Name "$command") (": modified submodule does not update submodule work tree from invalid commit") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to invalid_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t valid_sub1 origin/valid_sub1 &&\n"> <"\t\t\t$command valid_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/valid_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/valid_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) ] spids: [1523] ) spids: [1518 1522] ) (FuncDef name: test_submodule_forced_switch body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:command) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [2201] ) ] spids: [2201] ) (C {(test_expect_success)} {(DQ ($ VSub_Name "$command") (": added submodule creates empty directory"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to no_submodule &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n"> <"\t\t\t$command add_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": added submodule leaves existing empty directory alone") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to no_submodule &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n"> <"\t\t\tmkdir sub1 &&\n"> <"\t\t\t$command add_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") ( ": added submodule does remove untracked unignored file with same name when forced" ) ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to no_submodule &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n"> <"\t\t\t>sub1 &&\n"> <"\t\t\t$command add_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": replace tracked file with submodule creates empty directory") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to replace_sub1_with_file &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&\n"> <"\t\t\t$command replace_file_with_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/replace_file_with_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/replace_file_with_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ($ VSub_Name "$command") (": replace directory with submodule"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to replace_sub1_with_directory &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> < "\t\t\tgit branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&\n" > <"\t\t\t$command replace_directory_with_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/replace_directory_with_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/replace_directory_with_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": removed submodule leaves submodule directory and its contents in place") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n"> <"\t\t\t$command remove_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/remove_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": removed submodule leaves submodule containing a .git directory alone") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n"> <"\t\t\treplace_gitfile_with_git_dir sub1 &&\n"> <"\t\t\t$command remove_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/remove_sub1 &&\n"> <"\t\t\ttest_git_directory_is_unchanged sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_failure)} {(DQ ($ VSub_Name "$command") (": replace submodule with a directory must fail"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_failure)} { (DQ ($ VSub_Name "$command") (": replace submodule containing a .git directory with a directory must fail") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n"> <"\t\t\treplace_gitfile_with_git_dir sub1 &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_git_directory_is_unchanged sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_failure)} {(DQ ($ VSub_Name "$command") (": replace submodule with a file must fail"))} { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_file &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_failure)} { (DQ ($ VSub_Name "$command") (": replace submodule containing a .git directory with a file must fail") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n"> <"\t\t\treplace_gitfile_with_git_dir sub1 &&\n"> <"\t\t\ttest_must_fail $command replace_sub1_with_file &&\n"> <"\t\t\ttest_superproject_content origin/add_sub1 &&\n"> <"\t\t\ttest_git_directory_is_unchanged sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": modified submodule does not update submodule work tree") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t modify_sub1 origin/modify_sub1 &&\n"> <"\t\t\t$command modify_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/modify_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n"> <"\t\t\tgit submodule update &&\n"> <"\t\t\ttest_submodule_content sub1 origin/modify_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": modified submodule does not update submodule work tree to invalid commit") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to add_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t invalid_sub1 origin/invalid_sub1 &&\n"> <"\t\t\t$command invalid_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/invalid_sub1 &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n"> <"\t\t\ttest_must_fail git submodule update &&\n"> <"\t\t\ttest_submodule_content sub1 origin/add_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ($ VSub_Name "$command") (": modified submodule does not update submodule work tree from invalid commit") ) } { (SQ <"\n"> <"\t\tprolog &&\n"> <"\t\treset_work_tree_to invalid_sub1 &&\n"> <"\t\t(\n"> <"\t\t\tcd submodule_update &&\n"> <"\t\t\tgit branch -t valid_sub1 origin/valid_sub1 &&\n"> <"\t\t\t$command valid_sub1 &&\n"> <"\t\t\ttest_superproject_content origin/valid_sub1 &&\n"> <"\t\t\ttest_dir_is_empty sub1 &&\n"> <"\t\t\tgit submodule update --init --recursive &&\n"> <"\t\t\ttest_submodule_content sub1 origin/valid_sub1\n"> <"\t\t)\n"> <"\t"> ) } ) ] spids: [2198] ) spids: [2193 2197] ) ] )