(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'Test updating submodules\n' span_id:15) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id: Id.Lit_Chars val: 'This test verifies that "git submodule update" detaches the HEAD of the\n' span_id: 17 ) (Token id: Id.Lit_Chars val: 'submodule and "git submodule update --rebase/--merge" does not detach the HEAD.\n' span_id: 18 ) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: compare_head body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sha_master) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:36) command_list: (command.CommandList children: [ (C {(git)} {(rev-list)} {(--max-count) (Id.Lit_Equals '=') (1)} {(master)}) ] ) ) } spids: [35] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sha_head) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:50) command_list: (command.CommandList children: [ (C {(git)} {(rev-list)} {(--max-count) (Id.Lit_Equals '=') (1)} {(HEAD)}) ] ) ) } spids: [49] ) ] ) (C {(test)} {(DQ ($ Id.VSub_DollarName '$sha_master'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$sha_head'))} ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup a submodule tree' span_id:83))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) (Token id:Id.Lit_Chars val:'\techo file > file &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tgit commit -m upstream &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit clone . super &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgit clone super submodule &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\tgit clone super rebasing &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\tgit clone super merging &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit clone super none &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:97) (Token id: Id.Lit_Chars val: '\t git submodule add ../submodule submodule &&\n' span_id: 98 ) (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t git commit -m "submodule" &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\t git submodule init submodule\n' span_id:101) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\techo "line2" > file &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tgit commit -m "Commit 2"\n' span_id:106) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\t git pull --rebase origin\n' span_id:110) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\t git add submodule &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\t git commit -m "submodule update"\n' span_id:113) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:115) (Token id: Id.Lit_Chars val: '\t git submodule add ../rebasing rebasing &&\n' span_id: 116 ) (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\t git commit -m "rebasing"\n' span_id:118) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\t git submodule add ../merging merging &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\t git commit -m "rebasing"\n' span_id:123) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\t git submodule add ../none none &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t git commit -m "none"\n' span_id:128) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\tgit clone . recursivesuper &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\t( cd recursivesuper\n' span_id:131) (Token id:Id.Lit_Chars val:'\t git submodule add ../super super\n' span_id:132) (Token id:Id.Lit_Chars val:'\t)\n' span_id:133) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update detaching the HEAD ' span_id:140))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:144) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:146) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:150) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\t ! compare_head\n' span_id:154) (Token id:Id.Lit_Chars val:'\t)\n' span_id:155) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update from subdirectory' span_id:162))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:168) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\tmkdir super/sub &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\t(cd super/sub &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\t (cd ../submodule &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:173) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:174) (Token id: Id.Lit_Chars val: '\t git submodule update ../submodule &&\n' span_id: 175 ) (Token id:Id.Lit_Chars val:'\t cd ../submodule &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\t ! compare_head\n' span_id:177) (Token id:Id.Lit_Chars val:'\t)\n' span_id:178) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:supersha1) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:183) command_list: (command.CommandList children: [(C {(git)} {(-C)} {(super)} {(rev-parse)} {(HEAD)})] ) ) } spids: [182] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:mergingsha1) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:196) command_list: (command.CommandList children: [(C {(git)} {(-C)} {(super/merging)} {(rev-parse)} {(HEAD)})] ) ) } spids: [195] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:nonesha1) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:209) command_list: (command.CommandList children: [(C {(git)} {(-C)} {(super/none)} {(rev-parse)} {(HEAD)})] ) ) } spids: [208] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rebasingsha1) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:222) command_list: (command.CommandList children: [(C {(git)} {(-C)} {(super/rebasing)} {(rev-parse)} {(HEAD)})] ) ) } spids: [221] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:submodulesha1) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:235) command_list: (command.CommandList children: [(C {(git)} {(-C)} {(super/submodule)} {(rev-parse)} {(HEAD)})] ) ) } spids: [234] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pwd) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:248) command_list: (command.CommandList children:[(C {(pwd)})]) ) } spids: [247] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:255) fd: -1 here_begin: {(EOF)} here_end_span_id: 277 stdin_parts: [ ("Submodule path '../super': checked out '") ($ Id.VSub_DollarName '$supersha1') ("'\n") ("Submodule path '../super/merging': checked out '") ($ Id.VSub_DollarName '$mergingsha1') ("'\n") ("Submodule path '../super/none': checked out '") ($ Id.VSub_DollarName '$nonesha1') ("'\n") ("Submodule path '../super/rebasing': checked out '") ($ Id.VSub_DollarName '$rebasingsha1') ("'\n") ("Submodule path '../super/submodule': checked out '") ($ Id.VSub_DollarName '$submodulesha1') ("'\n") ] ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:258) fd: -1 arg_word: {(expect)} ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:281) fd: -1 here_begin: {(EOF)} here_end_span_id: 316 stdin_parts: [ ("Submodule 'merging' (") ($ Id.VSub_DollarName '$pwd') ("/merging) registered for path '../super/merging'\n") ("Submodule 'none' (") ($ Id.VSub_DollarName '$pwd') ("/none) registered for path '../super/none'\n") ("Submodule 'rebasing' (") ($ Id.VSub_DollarName '$pwd') ("/rebasing) registered for path '../super/rebasing'\n") ("Submodule 'submodule' (") ($ Id.VSub_DollarName '$pwd') ("/submodule) registered for path '../super/submodule'\n") ("Cloning into '") ($ Id.VSub_DollarName '$pwd') ("/recursivesuper/super/merging'...\n") ('done.\n') ("Cloning into '") ($ Id.VSub_DollarName '$pwd') ("/recursivesuper/super/none'...\n") ('done.\n') ("Cloning into '") ($ Id.VSub_DollarName '$pwd') ("/recursivesuper/super/rebasing'...\n") ('done.\n') ("Cloning into '") ($ Id.VSub_DollarName '$pwd') ("/recursivesuper/super/submodule'...\n") ('done.\n') ] ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:284) fd: -1 arg_word: {(expect2)} ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --init --recursive from subdirectory' span_id: 321 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:325) (Token id: Id.Lit_Chars val: '\tgit -C recursivesuper/super reset --hard HEAD^ &&\n' span_id: 326 ) (Token id:Id.Lit_Chars val:'\t(cd recursivesuper &&\n' span_id:327) (Token id:Id.Lit_Chars val:'\t mkdir tmp &&\n' span_id:328) (Token id:Id.Lit_Chars val:'\t cd tmp &&\n' span_id:329) (Token id: Id.Lit_Chars val: '\t git submodule update --init --recursive ../super >../../actual 2>../../actual2\n' span_id: 330 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:331) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual &&\n' span_id:332) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect2 actual2\n' span_id:333) ) } ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:apos) op: assign_op.Equal rhs: {(DQ ("'"))} spids: [337] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:341) ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update does not fetch already present commits' span_id: 346 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:350) (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:351) (Token id:Id.Lit_Chars val:'\t echo line3 >> file &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\t git add file &&\n' span_id:353) (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\t git commit -m "upstream line3"\n' span_id:355) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\t head=$(git rev-parse --verify HEAD) &&\n' span_id:358) (Token id: Id.Lit_Chars val: '\t echo "Submodule path ${apos}submodule$apos: checked out $apos$head$apos" > ../../expected &&\n' span_id: 359 ) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:360) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:361) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:362) (Token id: Id.Lit_Chars val: '\t git submodule update > ../actual 2> ../actual.err\n' span_id: 363 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:364) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\t! test -s actual.err\n' span_id:366) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update should fail due to local changes' span_id: 373 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:377) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:378) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1 &&\n' span_id:379) (Token id:Id.Lit_Chars val:'\t echo "local change" > file\n' span_id:380) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:381) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:382) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:384) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:385) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule update submodule\n' span_id: 386 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:387) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update should throw away changes with --force ' span_id: 393 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:397) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:398) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:399) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:400) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:401) (Token id: Id.Lit_Chars val: '\t git submodule update --force submodule &&\n' span_id: 402 ) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:403) (Token id:Id.Lit_Chars val:'\t ! compare_head\n' span_id:404) (Token id:Id.Lit_Chars val:'\t)\n' span_id:405) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --force forcibly checks out submodules' span_id: 412 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:416) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:417) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:418) (Token id:Id.Lit_Chars val:'\t rm -f file\n' span_id:419) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:420) (Token id: Id.Lit_Chars val: '\t git submodule update --force submodule &&\n' span_id: 421 ) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\t test "$(git status -s file)" = ""\n' span_id:423) (Token id:Id.Lit_Chars val:'\t )\n' span_id:424) (Token id:Id.Lit_Chars val:'\t)\n' span_id:425) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --remote should fetch upstream changes' span_id: 432 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:436) (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:437) (Token id:Id.Lit_Chars val:'\t echo line4 >> file &&\n' span_id:438) (Token id:Id.Lit_Chars val:'\t git add file &&\n' span_id:439) (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:440) (Token id:Id.Lit_Chars val:'\t git commit -m "upstream line4"\n' span_id:441) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:442) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\t git submodule update --remote --force submodule &&\n' span_id:444) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:445) (Token id: Id.Lit_Chars val: '\t test "$(git log -1 --oneline)" = "$(GIT_DIR=../../submodule/.git git log -1 --oneline)"\n' span_id: 446 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:447) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --remote should fetch upstream changes with .' span_id: 454 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:458) (Token id:Id.Lit_Chars val:'\t(\n' span_id:459) (Token id:Id.Lit_Chars val:'\t\tcd super &&\n' span_id:460) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule."submodule".branch "." &&\n' span_id: 461 ) (Token id:Id.Lit_Chars val:'\t\tgit add .gitmodules &&\n' span_id:462) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "submodules: update from the respective superproject branch"\n' span_id: 463 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:464) (Token id:Id.Lit_Chars val:'\t(\n' span_id:465) (Token id:Id.Lit_Chars val:'\t\tcd submodule &&\n' span_id:466) (Token id:Id.Lit_Chars val:'\t\techo line4a >> file &&\n' span_id:467) (Token id:Id.Lit_Chars val:'\t\tgit add file &&\n' span_id:468) (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:469) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "upstream line4a" &&\n' span_id: 470 ) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b test-branch &&\n' span_id:471) (Token id:Id.Lit_Chars val:'\t\ttest_commit on-test-branch\n' span_id:472) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\t(\n' span_id:474) (Token id:Id.Lit_Chars val:'\t\tcd super &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\t\tgit submodule update --remote --force submodule &&\n' span_id:476) (Token id: Id.Lit_Chars val: '\t\tgit -C submodule log -1 --oneline >actual\n' span_id: 477 ) (Token id:Id.Lit_Chars val:'\t\tgit -C ../submodule log -1 --oneline master >expect\n' span_id:478) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:479) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b test-branch &&\n' span_id:480) (Token id: Id.Lit_Chars val: '\t\tgit submodule update --remote --force submodule &&\n' span_id: 481 ) (Token id:Id.Lit_Chars val:'\t\tgit -C submodule log -1 --oneline >actual\n' span_id:482) (Token id: Id.Lit_Chars val: '\t\tgit -C ../submodule log -1 --oneline test-branch >expect\n' span_id: 483 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:484) (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:485) (Token id:Id.Lit_Chars val:'\t\tgit branch -d test-branch &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\t\tgit reset --hard HEAD^\n' span_id:487) (Token id:Id.Lit_Chars val:'\t)\n' span_id:488) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'local config should override .gitmodules branch' span_id:495))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:499) (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:500) (Token id:Id.Lit_Chars val:'\t git checkout test-branch &&\n' span_id:501) (Token id:Id.Lit_Chars val:'\t echo line5 >> file &&\n' span_id:502) (Token id:Id.Lit_Chars val:'\t git add file &&\n' span_id:503) (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:504) (Token id:Id.Lit_Chars val:'\t git commit -m "upstream line5" &&\n' span_id:505) (Token id:Id.Lit_Chars val:'\t git checkout master\n' span_id:506) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.branch test-branch &&\n' span_id:509) (Token id: Id.Lit_Chars val: '\t git submodule update --remote --force submodule &&\n' span_id: 510 ) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:511) (Token id: Id.Lit_Chars val: '\t test "$(git log -1 --oneline)" = "$(GIT_DIR=../../submodule/.git git log -1 --oneline test-branch)"\n' span_id: 512 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:513) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update --rebase staying on master' span_id:520))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:524) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:525) (Token id:Id.Lit_Chars val:'\t git checkout master\n' span_id:526) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:527) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:528) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:530) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\t git submodule update --rebase submodule &&\n' span_id:532) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:533) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:534) (Token id:Id.Lit_Chars val:'\t)\n' span_id:535) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update --merge staying on master' span_id:542))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:546) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:547) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:548) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:552) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:553) (Token id:Id.Lit_Chars val:'\t git submodule update --merge submodule &&\n' span_id:554) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:555) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:556) (Token id:Id.Lit_Chars val:'\t)\n' span_id:557) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update - rebase in .git/config' span_id:564))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:568) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:569) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update rebase\n' span_id:570) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:571) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:573) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:575) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:576) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:577) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:578) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:579) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:580) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:581) (Token id:Id.Lit_Chars val:'\t)\n' span_id:582) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update - checkout in .git/config but --rebase given' span_id: 589 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:593) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:594) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update checkout\n' span_id:595) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:596) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:597) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:598) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:599) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:600) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:601) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:602) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:603) (Token id: Id.Lit_Chars val: '\t git submodule update --rebase submodule &&\n' span_id: 604 ) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:605) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:606) (Token id:Id.Lit_Chars val:'\t)\n' span_id:607) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update - merge in .git/config' span_id:614))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:618) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:619) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update merge\n' span_id:620) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:621) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:622) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:623) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:624) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:625) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:626) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:627) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:629) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:630) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:631) (Token id:Id.Lit_Chars val:'\t)\n' span_id:632) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update - checkout in .git/config but --merge given' span_id: 639 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:643) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:644) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update checkout\n' span_id:645) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:646) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:647) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD~1\n' span_id:648) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:649) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:650) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:651) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:652) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:653) (Token id: Id.Lit_Chars val: '\t git submodule update --merge submodule &&\n' span_id: 654 ) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:655) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:656) (Token id:Id.Lit_Chars val:'\t)\n' span_id:657) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update - checkout in .git/config' span_id:664))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:668) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:669) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update checkout\n' span_id:670) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:671) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:672) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD^\n' span_id:673) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:674) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:675) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:676) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:677) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:678) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:679) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:680) (Token id:Id.Lit_Chars val:'\t ! compare_head\n' span_id:681) (Token id:Id.Lit_Chars val:'\t)\n' span_id:682) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update - command in .git/config' span_id:689))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:693) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:694) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update "!git checkout"\n' span_id:695) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:696) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:697) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD^\n' span_id:698) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:699) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:700) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:701) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:702) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:703) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:704) (Token id:Id.Lit_Chars val:'\t cd submodule &&\n' span_id:705) (Token id:Id.Lit_Chars val:'\t ! compare_head\n' span_id:706) (Token id:Id.Lit_Chars val:'\t)\n' span_id:707) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:713) fd: -1 here_begin: {(EOF)} here_end_span_id: 724 stdin_parts: [ ("Execution of 'false ") ($ Id.VSub_DollarName '$submodulesha1') ("' failed in submodule path 'submodule'\n") ] ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:717) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update - command in .git/config catches failure' span_id: 729 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:733) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:734) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update "!false"\n' span_id:735) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:736) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\t git reset --hard $submodulesha1^\n' span_id:738) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:739) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:740) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule update submodule 2>../actual\n' span_id: 741 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:742) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp actual expect\n' span_id:743) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:749) fd: -1 here_begin: {(EOF)} here_end_span_id: 760 stdin_parts: [ ("Execution of 'false ") ($ Id.VSub_DollarName '$submodulesha1') ("' failed in submodule path '../submodule'\n") ] ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:753) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update - command in .git/config catches failure -- subdirectory' span_id: 765 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:769) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:770) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update "!false"\n' span_id:771) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:772) (Token id:Id.Lit_Chars val:'\t(cd super/submodule &&\n' span_id:773) (Token id:Id.Lit_Chars val:'\t git reset --hard $submodulesha1^\n' span_id:774) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:775) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:776) (Token id:Id.Lit_Chars val:'\t mkdir tmp && cd tmp &&\n' span_id:777) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule update ../submodule 2>../../actual\n' span_id: 778 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:779) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp actual expect\n' span_id:780) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:786) fd: -1 here_begin: {(EOF)} here_end_span_id: 798 stdin_parts: [ ("Execution of 'false ") ($ Id.VSub_DollarName '$submodulesha1') ("' failed in submodule path '../super/submodule'\n") ("Failed to recurse into submodule path '../super'\n") ] ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:790) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'recursive submodule update - command in .git/config catches failure -- subdirectory' span_id: 803 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:807) (Token id:Id.Lit_Chars val:'\t(cd recursivesuper &&\n' span_id:808) (Token id:Id.Lit_Chars val:'\t git submodule update --remote super &&\n' span_id:809) (Token id:Id.Lit_Chars val:'\t git add super &&\n' span_id:810) (Token id: Id.Lit_Chars val: '\t git commit -m "update to latest to have more than one commit in submodules"\n' span_id: 811 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:812) (Token id: Id.Lit_Chars val: '\tgit -C recursivesuper/super config submodule.submodule.update "!false" &&\n' span_id: 813 ) (Token id: Id.Lit_Chars val: '\tgit -C recursivesuper/super/submodule reset --hard $submodulesha1^ &&\n' span_id: 814 ) (Token id:Id.Lit_Chars val:'\t(cd recursivesuper &&\n' span_id:815) (Token id:Id.Lit_Chars val:'\t mkdir -p tmp && cd tmp &&\n' span_id:816) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule update --recursive ../super 2>../../actual\n' span_id: 817 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:818) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp actual expect\n' span_id:819) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule init does not copy command into .git/config' span_id: 826 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:830) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:831) (Token id:Id.Lit_Chars val:'\t H=$(git ls-files -s submodule | cut -d" " -f2) &&\n' span_id:832) (Token id:Id.Lit_Chars val:'\t mkdir submodule1 &&\n' span_id:833) (Token id: Id.Lit_Chars val: '\t git update-index --add --cacheinfo 160000 $H submodule1 &&\n' span_id: 834 ) (Token id: Id.Lit_Chars val: '\t git config -f .gitmodules submodule.submodule1.path submodule1 &&\n' span_id: 835 ) (Token id: Id.Lit_Chars val: '\t git config -f .gitmodules submodule.submodule1.url ../submodule &&\n' span_id: 836 ) (Token id: Id.Lit_Chars val: '\t git config -f .gitmodules submodule.submodule1.update !false &&\n' span_id: 837 ) (Token id:Id.Lit_Chars val:'\t git submodule init submodule1 &&\n' span_id:838) (Token id:Id.Lit_Chars val:'\t echo "none" >expect &&\n' span_id:839) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule1.update >actual &&\n' span_id:840) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:841) (Token id:Id.Lit_Chars val:'\t)\n' span_id:842) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule init picks up rebase' span_id:849))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:853) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:854) (Token id: Id.Lit_Chars val: '\t git config -f .gitmodules submodule.rebasing.update rebase &&\n' span_id: 855 ) (Token id:Id.Lit_Chars val:'\t git submodule init rebasing &&\n' span_id:856) (Token id: Id.Lit_Chars val: '\t test "rebase" = "$(git config submodule.rebasing.update)"\n' span_id: 857 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:858) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule init picks up merge' span_id:865))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:869) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:870) (Token id: Id.Lit_Chars val: '\t git config -f .gitmodules submodule.merging.update merge &&\n' span_id: 871 ) (Token id:Id.Lit_Chars val:'\t git submodule init merging &&\n' span_id:872) (Token id: Id.Lit_Chars val: '\t test "merge" = "$(git config submodule.merging.update)"\n' span_id: 873 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:874) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --merge - ignores --merge for new submodules' span_id: 881 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:885) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:886) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:887) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:888) (Token id:Id.Lit_Chars val:'\t git status -s submodule >expect &&\n' span_id:889) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:890) (Token id:Id.Lit_Chars val:'\t git submodule update --merge submodule &&\n' span_id:891) (Token id:Id.Lit_Chars val:'\t git status -s submodule >actual &&\n' span_id:892) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:893) (Token id:Id.Lit_Chars val:'\t)\n' span_id:894) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --rebase - ignores --rebase for new submodules' span_id: 901 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:905) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:906) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:907) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:908) (Token id:Id.Lit_Chars val:'\t git status -s submodule >expect &&\n' span_id:909) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:910) (Token id:Id.Lit_Chars val:'\t git submodule update --rebase submodule &&\n' span_id:911) (Token id:Id.Lit_Chars val:'\t git status -s submodule >actual &&\n' span_id:912) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:913) (Token id:Id.Lit_Chars val:'\t)\n' span_id:914) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update ignores update=merge config for new submodules' span_id: 921 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:925) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:926) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:927) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:928) (Token id:Id.Lit_Chars val:'\t git status -s submodule >expect &&\n' span_id:929) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:930) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update merge &&\n' span_id:931) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:932) (Token id:Id.Lit_Chars val:'\t git status -s submodule >actual &&\n' span_id:933) (Token id: Id.Lit_Chars val: '\t git config --unset submodule.submodule.update &&\n' span_id: 934 ) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:935) (Token id:Id.Lit_Chars val:'\t)\n' span_id:936) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update ignores update=rebase config for new submodules' span_id: 943 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:947) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:948) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:949) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:950) (Token id:Id.Lit_Chars val:'\t git status -s submodule >expect &&\n' span_id:951) (Token id:Id.Lit_Chars val:'\t rm -rf submodule &&\n' span_id:952) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update rebase &&\n' span_id:953) (Token id:Id.Lit_Chars val:'\t git submodule update submodule &&\n' span_id:954) (Token id:Id.Lit_Chars val:'\t git status -s submodule >actual &&\n' span_id:955) (Token id: Id.Lit_Chars val: '\t git config --unset submodule.submodule.update &&\n' span_id: 956 ) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:957) (Token id:Id.Lit_Chars val:'\t)\n' span_id:958) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule init picks up update=none' span_id:965))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:969) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:970) (Token id: Id.Lit_Chars val: '\t git config -f .gitmodules submodule.none.update none &&\n' span_id: 971 ) (Token id:Id.Lit_Chars val:'\t git submodule init none &&\n' span_id:972) (Token id: Id.Lit_Chars val: '\t test "none" = "$(git config submodule.none.update)"\n' span_id: 973 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:974) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update - update=none in .git/config' span_id:981))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:985) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:986) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update none &&\n' span_id:987) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:988) (Token id:Id.Lit_Chars val:'\t git checkout master &&\n' span_id:989) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:990) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:991) (Token id: Id.Lit_Chars val: '\t git diff --raw | grep "\tsubmodule" &&\n' span_id: 992 ) (Token id:Id.Lit_Chars val:'\t git submodule update &&\n' span_id:993) (Token id: Id.Lit_Chars val: '\t git diff --raw | grep "\tsubmodule" &&\n' span_id: 994 ) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:995) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:996) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:997) (Token id: Id.Lit_Chars val: '\t git config --unset submodule.submodule.update &&\n' span_id: 998 ) (Token id:Id.Lit_Chars val:'\t git submodule update submodule\n' span_id:999) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1000) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update - update=none in .git/config but --checkout given' span_id: 1007 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1011) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1012) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update none &&\n' span_id:1013) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1014) (Token id:Id.Lit_Chars val:'\t git checkout master &&\n' span_id:1015) (Token id:Id.Lit_Chars val:'\t compare_head\n' span_id:1016) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1017) (Token id: Id.Lit_Chars val: '\t git diff --raw | grep "\tsubmodule" &&\n' span_id: 1018 ) (Token id:Id.Lit_Chars val:'\t git submodule update --checkout &&\n' span_id:1019) (Token id: Id.Lit_Chars val: '\t test_must_fail git diff --raw \\| grep "\tsubmodule" &&\n' span_id: 1020 ) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1021) (Token id:Id.Lit_Chars val:'\t test_must_fail compare_head\n' span_id:1022) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1023) (Token id: Id.Lit_Chars val: '\t git config --unset submodule.submodule.update\n' span_id: 1024 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1025) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --init skips submodule with update=none' span_id: 1032 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1036) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1037) (Token id:Id.Lit_Chars val:'\t git add .gitmodules &&\n' span_id:1038) (Token id:Id.Lit_Chars val:'\t git commit -m ".gitmodules"\n' span_id:1039) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1040) (Token id:Id.Lit_Chars val:'\tgit clone super cloned &&\n' span_id:1041) (Token id:Id.Lit_Chars val:'\t(cd cloned &&\n' span_id:1042) (Token id:Id.Lit_Chars val:'\t git submodule update --init &&\n' span_id:1043) (Token id:Id.Lit_Chars val:'\t test -e submodule/.git &&\n' span_id:1044) (Token id:Id.Lit_Chars val:'\t test_must_fail test -e none/.git\n' span_id:1045) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1046) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update continues after checkout error' span_id: 1053 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1057) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1058) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD &&\n' span_id:1059) (Token id: Id.Lit_Chars val: '\t git submodule add ../submodule submodule2 &&\n' span_id: 1060 ) (Token id:Id.Lit_Chars val:'\t git submodule init &&\n' span_id:1061) (Token id:Id.Lit_Chars val:'\t git commit -am "new_submodule" &&\n' span_id:1062) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1063) (Token id: Id.Lit_Chars val: '\t git rev-parse --verify HEAD >../expect\n' span_id: 1064 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1065) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1066) (Token id:Id.Lit_Chars val:'\t test_commit "update_submodule" file\n' span_id:1067) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1068) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1069) (Token id: Id.Lit_Chars val: '\t test_commit "update_submodule2" file\n' span_id: 1070 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1071) (Token id:Id.Lit_Chars val:'\t git add submodule &&\n' span_id:1072) (Token id:Id.Lit_Chars val:'\t git add submodule2 &&\n' span_id:1073) (Token id: Id.Lit_Chars val: '\t git commit -m "two_new_submodule_commits" &&\n' span_id: 1074 ) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1075) (Token id:Id.Lit_Chars val:'\t echo "" > file\n' span_id:1076) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1077) (Token id:Id.Lit_Chars val:'\t git checkout HEAD^ &&\n' span_id:1078) (Token id:Id.Lit_Chars val:'\t test_must_fail git submodule update &&\n' span_id:1079) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1080) (Token id:Id.Lit_Chars val:'\t git rev-parse --verify HEAD >../actual\n' span_id:1081) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1082) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:1083) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1084) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update continues after recursive checkout error' span_id: 1090 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1094) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1095) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD &&\n' span_id:1096) (Token id:Id.Lit_Chars val:'\t git checkout master &&\n' span_id:1097) (Token id:Id.Lit_Chars val:'\t git submodule update &&\n' span_id:1098) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1099) (Token id:Id.Lit_Chars val:'\t git submodule add ../submodule subsubmodule &&\n' span_id:1100) (Token id:Id.Lit_Chars val:'\t git submodule init &&\n' span_id:1101) (Token id:Id.Lit_Chars val:'\t git commit -m "new_subsubmodule"\n' span_id:1102) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1103) (Token id:Id.Lit_Chars val:'\t git add submodule &&\n' span_id:1104) (Token id: Id.Lit_Chars val: '\t git commit -m "update_submodule" &&\n' span_id: 1105 ) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1106) (Token id:Id.Lit_Chars val:'\t (cd subsubmodule &&\n' span_id:1107) (Token id:Id.Lit_Chars val:'\t test_commit "update_subsubmodule" file\n' span_id:1108) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1109) (Token id:Id.Lit_Chars val:'\t git add subsubmodule &&\n' span_id:1110) (Token id: Id.Lit_Chars val: '\t test_commit "update_submodule_again" file &&\n' span_id: 1111 ) (Token id:Id.Lit_Chars val:'\t (cd subsubmodule &&\n' span_id:1112) (Token id: Id.Lit_Chars val: '\t test_commit "update_subsubmodule_again" file\n' span_id: 1113 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1114) (Token id: Id.Lit_Chars val: '\t test_commit "update_submodule_again_again" file\n' span_id: 1115 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1116) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1117) (Token id:Id.Lit_Chars val:'\t git rev-parse --verify HEAD >../expect &&\n' span_id:1118) (Token id: Id.Lit_Chars val: '\t test_commit "update_submodule2_again" file\n' span_id: 1119 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1120) (Token id:Id.Lit_Chars val:'\t git add submodule &&\n' span_id:1121) (Token id:Id.Lit_Chars val:'\t git add submodule2 &&\n' span_id:1122) (Token id:Id.Lit_Chars val:'\t git commit -m "new_commits" &&\n' span_id:1123) (Token id:Id.Lit_Chars val:'\t git checkout HEAD^ &&\n' span_id:1124) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1125) (Token id:Id.Lit_Chars val:'\t git checkout HEAD^ &&\n' span_id:1126) (Token id:Id.Lit_Chars val:'\t (cd subsubmodule &&\n' span_id:1127) (Token id:Id.Lit_Chars val:'\t echo "" > file\n' span_id:1128) (Token id:Id.Lit_Chars val:'\t )\n' span_id:1129) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1130) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule update --recursive &&\n' span_id: 1131 ) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1132) (Token id: Id.Lit_Chars val: '\t git rev-parse --verify HEAD >../actual\n' span_id: 1133 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1134) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:1135) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1136) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update exit immediately in case of merge conflict' span_id: 1143 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1147) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1148) (Token id:Id.Lit_Chars val:'\t git checkout master &&\n' span_id:1149) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD &&\n' span_id:1150) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1151) (Token id:Id.Lit_Chars val:'\t (cd subsubmodule &&\n' span_id:1152) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD\n' span_id:1153) (Token id:Id.Lit_Chars val:'\t )\n' span_id:1154) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1155) (Token id: Id.Lit_Chars val: '\t git submodule update --recursive &&\n' span_id: 1156 ) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1157) (Token id: Id.Lit_Chars val: '\t test_commit "update_submodule_2" file\n' span_id: 1158 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1159) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1160) (Token id:Id.Lit_Chars val:'\t test_commit "update_submodule2_2" file\n' span_id:1161) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1162) (Token id:Id.Lit_Chars val:'\t git add submodule &&\n' span_id:1163) (Token id:Id.Lit_Chars val:'\t git add submodule2 &&\n' span_id:1164) (Token id:Id.Lit_Chars val:'\t git commit -m "two_new_submodule_commits" &&\n' span_id:1165) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1166) (Token id:Id.Lit_Chars val:'\t git checkout master &&\n' span_id:1167) (Token id:Id.Lit_Chars val:'\t test_commit "conflict" file &&\n' span_id:1168) (Token id:Id.Lit_Chars val:'\t echo "conflict" > file\n' span_id:1169) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1170) (Token id:Id.Lit_Chars val:'\t git checkout HEAD^ &&\n' span_id:1171) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1172) (Token id:Id.Lit_Chars val:'\t git rev-parse --verify HEAD >../expect\n' span_id:1173) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1174) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update merge &&\n' span_id:1175) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule update &&\n' span_id: 1176 ) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1177) (Token id: Id.Lit_Chars val: '\t git rev-parse --verify HEAD >../actual\n' span_id: 1178 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1179) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:1180) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1181) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update exit immediately after recursive rebase error' span_id: 1188 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1192) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1193) (Token id:Id.Lit_Chars val:'\t git checkout master &&\n' span_id:1194) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD &&\n' span_id:1195) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1196) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD &&\n' span_id:1197) (Token id:Id.Lit_Chars val:'\t git submodule update --recursive\n' span_id:1198) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1199) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1200) (Token id: Id.Lit_Chars val: '\t test_commit "update_submodule_3" file\n' span_id: 1201 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1202) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1203) (Token id:Id.Lit_Chars val:'\t test_commit "update_submodule2_3" file\n' span_id:1204) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1205) (Token id:Id.Lit_Chars val:'\t git add submodule &&\n' span_id:1206) (Token id:Id.Lit_Chars val:'\t git add submodule2 &&\n' span_id:1207) (Token id:Id.Lit_Chars val:'\t git commit -m "two_new_submodule_commits" &&\n' span_id:1208) (Token id:Id.Lit_Chars val:'\t (cd submodule &&\n' span_id:1209) (Token id:Id.Lit_Chars val:'\t git checkout master &&\n' span_id:1210) (Token id:Id.Lit_Chars val:'\t test_commit "conflict2" file &&\n' span_id:1211) (Token id:Id.Lit_Chars val:'\t echo "conflict" > file\n' span_id:1212) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1213) (Token id:Id.Lit_Chars val:'\t git checkout HEAD^ &&\n' span_id:1214) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1215) (Token id:Id.Lit_Chars val:'\t git rev-parse --verify HEAD >../expect\n' span_id:1216) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1217) (Token id:Id.Lit_Chars val:'\t git config submodule.submodule.update rebase &&\n' span_id:1218) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule update &&\n' span_id: 1219 ) (Token id:Id.Lit_Chars val:'\t (cd submodule2 &&\n' span_id:1220) (Token id: Id.Lit_Chars val: '\t git rev-parse --verify HEAD >../actual\n' span_id: 1221 ) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1222) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:1223) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1224) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add different submodules to the same path' span_id:1231))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1235) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1236) (Token id:Id.Lit_Chars val:'\t git submodule add ../submodule s1 &&\n' span_id:1237) (Token id: Id.Lit_Chars val: '\t test_must_fail git submodule add ../merging s1\n' span_id: 1238 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1239) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule add places git-dir in superprojects git-dir' span_id: 1246 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1250) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1251) (Token id:Id.Lit_Chars val:'\t mkdir deeper &&\n' span_id:1252) (Token id: Id.Lit_Chars val: '\t git submodule add ../submodule deeper/submodule &&\n' span_id: 1253 ) (Token id:Id.Lit_Chars val:'\t (cd deeper/submodule &&\n' span_id:1254) (Token id:Id.Lit_Chars val:'\t git log > ../../expected\n' span_id:1255) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1256) (Token id: Id.Lit_Chars val: '\t (cd .git/modules/deeper/submodule &&\n' span_id: 1257 ) (Token id:Id.Lit_Chars val:'\t git log > ../../../../actual\n' span_id:1258) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1259) (Token id:Id.Lit_Chars val:'\t test_cmp actual expected\n' span_id:1260) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1261) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update places git-dir in superprojects git-dir' span_id: 1268 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1272) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1273) (Token id:Id.Lit_Chars val:'\t git commit -m "added submodule"\n' span_id:1274) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1275) (Token id:Id.Lit_Chars val:'\tgit clone super super2 &&\n' span_id:1276) (Token id:Id.Lit_Chars val:'\t(cd super2 &&\n' span_id:1277) (Token id:Id.Lit_Chars val:'\t git submodule init deeper/submodule &&\n' span_id:1278) (Token id:Id.Lit_Chars val:'\t git submodule update &&\n' span_id:1279) (Token id:Id.Lit_Chars val:'\t (cd deeper/submodule &&\n' span_id:1280) (Token id:Id.Lit_Chars val:'\t git log > ../../expected\n' span_id:1281) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1282) (Token id: Id.Lit_Chars val: '\t (cd .git/modules/deeper/submodule &&\n' span_id: 1283 ) (Token id:Id.Lit_Chars val:'\t git log > ../../../../actual\n' span_id:1284) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1285) (Token id:Id.Lit_Chars val:'\t test_cmp actual expected\n' span_id:1286) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1287) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule add places git-dir in superprojects git-dir recursive' span_id: 1294 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1298) (Token id:Id.Lit_Chars val:'\t(cd super2 &&\n' span_id:1299) (Token id:Id.Lit_Chars val:'\t (cd deeper/submodule &&\n' span_id:1300) (Token id: Id.Lit_Chars val: '\t git submodule add ../submodule subsubmodule &&\n' span_id: 1301 ) (Token id:Id.Lit_Chars val:'\t (cd subsubmodule &&\n' span_id:1302) (Token id:Id.Lit_Chars val:'\t git log > ../../../expected\n' span_id:1303) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1304) (Token id: Id.Lit_Chars val: '\t git commit -m "added subsubmodule" &&\n' span_id: 1305 ) (Token id:Id.Lit_Chars val:'\t git push origin :\n' span_id:1306) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1307) (Token id: Id.Lit_Chars val: '\t (cd .git/modules/deeper/submodule/modules/subsubmodule &&\n' span_id: 1308 ) (Token id:Id.Lit_Chars val:'\t git log > ../../../../../actual\n' span_id:1309) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1310) (Token id:Id.Lit_Chars val:'\t git add deeper/submodule &&\n' span_id:1311) (Token id: Id.Lit_Chars val: '\t git commit -m "update submodule" &&\n' span_id: 1312 ) (Token id:Id.Lit_Chars val:'\t git push origin : &&\n' span_id:1313) (Token id:Id.Lit_Chars val:'\t test_cmp actual expected\n' span_id:1314) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1315) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update places git-dir in superprojects git-dir recursive' span_id: 1322 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1326) (Token id:Id.Lit_Chars val:'\tmkdir super_update_r &&\n' span_id:1327) (Token id:Id.Lit_Chars val:'\t(cd super_update_r &&\n' span_id:1328) (Token id:Id.Lit_Chars val:'\t git init --bare\n' span_id:1329) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1330) (Token id:Id.Lit_Chars val:'\tmkdir subsuper_update_r &&\n' span_id:1331) (Token id:Id.Lit_Chars val:'\t(cd subsuper_update_r &&\n' span_id:1332) (Token id:Id.Lit_Chars val:'\t git init --bare\n' span_id:1333) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1334) (Token id:Id.Lit_Chars val:'\tmkdir subsubsuper_update_r &&\n' span_id:1335) (Token id:Id.Lit_Chars val:'\t(cd subsubsuper_update_r &&\n' span_id:1336) (Token id:Id.Lit_Chars val:'\t git init --bare\n' span_id:1337) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1338) (Token id: Id.Lit_Chars val: '\tgit clone subsubsuper_update_r subsubsuper_update_r2 &&\n' span_id: 1339 ) (Token id:Id.Lit_Chars val:'\t(cd subsubsuper_update_r2 &&\n' span_id:1340) (Token id: Id.Lit_Chars val: '\t test_commit "update_subsubsuper" file &&\n' span_id: 1341 ) (Token id:Id.Lit_Chars val:'\t git push origin master\n' span_id:1342) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1343) (Token id:Id.Lit_Chars val:'\tgit clone subsuper_update_r subsuper_update_r2 &&\n' span_id:1344) (Token id:Id.Lit_Chars val:'\t(cd subsuper_update_r2 &&\n' span_id:1345) (Token id:Id.Lit_Chars val:'\t test_commit "update_subsuper" file &&\n' span_id:1346) (Token id: Id.Lit_Chars val: '\t git submodule add ../subsubsuper_update_r subsubmodule &&\n' span_id: 1347 ) (Token id:Id.Lit_Chars val:'\t git commit -am "subsubmodule" &&\n' span_id:1348) (Token id:Id.Lit_Chars val:'\t git push origin master\n' span_id:1349) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1350) (Token id: Id.Lit_Chars val: '\tgit clone super_update_r super_update_r2 &&\n' span_id: 1351 ) (Token id:Id.Lit_Chars val:'\t(cd super_update_r2 &&\n' span_id:1352) (Token id: Id.Lit_Chars val: '\t test_commit "update_super" file &&\n' span_id: 1353 ) (Token id:Id.Lit_Chars val:'\t git submodule add ../subsuper_update_r submodule &&\n' span_id:1354) (Token id:Id.Lit_Chars val:'\t git commit -am "submodule" &&\n' span_id:1355) (Token id:Id.Lit_Chars val:'\t git push origin master\n' span_id:1356) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1357) (Token id:Id.Lit_Chars val:'\trm -rf super_update_r2 &&\n' span_id:1358) (Token id: Id.Lit_Chars val: '\tgit clone super_update_r super_update_r2 &&\n' span_id: 1359 ) (Token id:Id.Lit_Chars val:'\t(cd super_update_r2 &&\n' span_id:1360) (Token id: Id.Lit_Chars val: '\t git submodule update --init --recursive >actual &&\n' span_id: 1361 ) (Token id: Id.Lit_Chars val: '\t test_i18ngrep "Submodule path .submodule/subsubmodule.: checked out" actual &&\n' span_id: 1362 ) (Token id:Id.Lit_Chars val:'\t (cd submodule/subsubmodule &&\n' span_id:1363) (Token id:Id.Lit_Chars val:'\t git log > ../../expected\n' span_id:1364) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1365) (Token id: Id.Lit_Chars val: '\t (cd .git/modules/submodule/modules/subsubmodule\n' span_id: 1366 ) (Token id:Id.Lit_Chars val:'\t git log > ../../../../../actual\n' span_id:1367) (Token id:Id.Lit_Chars val:'\t )\n' span_id:1368) (Token id:Id.Lit_Chars val:'\t test_cmp actual expected\n' span_id:1369) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1370) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule add properly re-creates deeper level submodules' span_id: 1377 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1381) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1382) (Token id:Id.Lit_Chars val:'\t git reset --hard master &&\n' span_id:1383) (Token id:Id.Lit_Chars val:'\t rm -rf deeper/ &&\n' span_id:1384) (Token id: Id.Lit_Chars val: '\t git submodule add --force ../submodule deeper/submodule\n' span_id: 1385 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1386) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update properly revives a moved submodule' span_id: 1393 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1397) (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:1398) (Token id:Id.Lit_Chars val:'\t H=$(git rev-parse --short HEAD) &&\n' span_id:1399) (Token id:Id.Lit_Chars val:'\t git commit -am "pre move" &&\n' span_id:1400) (Token id:Id.Lit_Chars val:'\t H2=$(git rev-parse --short HEAD) &&\n' span_id:1401) (Token id: Id.Lit_Chars val: '\t git status | sed "s/$H/XXX/" >expect &&\n' span_id: 1402 ) (Token id:Id.Lit_Chars val:'\t H=$(cd submodule2; git rev-parse HEAD) &&\n' span_id:1403) (Token id:Id.Lit_Chars val:'\t git rm --cached submodule2 &&\n' span_id:1404) (Token id:Id.Lit_Chars val:'\t rm -rf submodule2 &&\n' span_id:1405) (Token id:Id.Lit_Chars val:'\t mkdir -p "moved/sub module" &&\n' span_id:1406) (Token id: Id.Lit_Chars val: '\t git update-index --add --cacheinfo 160000 $H "moved/sub module" &&\n' span_id: 1407 ) (Token id: Id.Lit_Chars val: '\t git config -f .gitmodules submodule.submodule2.path "moved/sub module"\n' span_id: 1408 ) (Token id:Id.Lit_Chars val:'\t git commit -am "post move" &&\n' span_id:1409) (Token id:Id.Lit_Chars val:'\t git submodule update &&\n' span_id:1410) (Token id:Id.Lit_Chars val:'\t git status | sed "s/$H2/XXX/" >actual &&\n' span_id:1411) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:1412) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1413) ) } ) (C {(test_expect_success)} {(SYMLINKS)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update can handle symbolic links in pwd' span_id: 1422 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1426) (Token id:Id.Lit_Chars val:'\tmkdir -p linked/dir &&\n' span_id:1427) (Token id:Id.Lit_Chars val:'\tln -s linked/dir linkto &&\n' span_id:1428) (Token id:Id.Lit_Chars val:'\t(cd linkto &&\n' span_id:1429) (Token id:Id.Lit_Chars val:'\t git clone "$TRASH_DIRECTORY"/super_update_r2 super &&\n' span_id:1430) (Token id:Id.Lit_Chars val:'\t (cd super &&\n' span_id:1431) (Token id:Id.Lit_Chars val:'\t git submodule update --init --recursive\n' span_id:1432) (Token id:Id.Lit_Chars val:'\t )\n' span_id:1433) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1434) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update clone shallow submodule' span_id:1441))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1445) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -rf super3" &&\n' span_id: 1446 ) (Token id: Id.Lit_Chars val: '\tfirst=$(git -C cloned submodule status submodule |cut -c2-41) &&\n' span_id: 1447 ) (Token id:Id.Lit_Chars val:'\tsecond=$(git -C submodule rev-parse HEAD) &&\n' span_id:1448) (Token id: Id.Lit_Chars val: '\tcommit_count=$(git -C submodule rev-list --count $first^..$second) &&\n' span_id: 1449 ) (Token id:Id.Lit_Chars val:'\tgit clone cloned super3 &&\n' span_id:1450) (Token id:Id.Lit_Chars val:'\tpwd=$(pwd) &&\n' span_id:1451) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1452) (Token id:Id.Lit_Chars val:'\t\tcd super3 &&\n' span_id:1453) (Token id: Id.Lit_Chars val: '\t\tsed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp &&\n' span_id: 1454 ) (Token id:Id.Lit_Chars val:'\t\tmv -f .gitmodules.tmp .gitmodules &&\n' span_id:1455) (Token id: Id.Lit_Chars val: '\t\tgit submodule update --init --depth=$commit_count &&\n' span_id: 1456 ) (Token id:Id.Lit_Chars val:'\t\ttest 1 = $(git -C submodule log --oneline | wc -l)\n' span_id:1457) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1458) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update clone shallow submodule outside of depth' span_id: 1465 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1469) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -rf super3" &&\n' span_id: 1470 ) (Token id:Id.Lit_Chars val:'\tgit clone cloned super3 &&\n' span_id:1471) (Token id:Id.Lit_Chars val:'\tpwd=$(pwd) &&\n' span_id:1472) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1473) (Token id:Id.Lit_Chars val:'\t\tcd super3 &&\n' span_id:1474) (Token id: Id.Lit_Chars val: '\t\tsed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp &&\n' span_id: 1475 ) (Token id:Id.Lit_Chars val:'\t\tmv -f .gitmodules.tmp .gitmodules &&\n' span_id:1476) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git submodule update --init --depth=1 2>actual &&\n' span_id: 1477 ) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "Direct fetching of that commit failed." actual &&\n' span_id: 1478 ) (Token id: Id.Lit_Chars val: '\t\tgit -C ../submodule config uploadpack.allowReachableSHA1InWant true &&\n' span_id: 1479 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule update --init --depth=1 >actual &&\n' span_id:1480) (Token id: Id.Lit_Chars val: '\t\ttest 1 = $(git -C submodule log --oneline | wc -l)\n' span_id: 1481 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1482) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update --recursive drops module name before recursing' span_id: 1489 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1493) (Token id:Id.Lit_Chars val:'\t(cd super2 &&\n' span_id:1494) (Token id:Id.Lit_Chars val:'\t (cd deeper/submodule/subsubmodule &&\n' span_id:1495) (Token id:Id.Lit_Chars val:'\t git checkout HEAD^\n' span_id:1496) (Token id:Id.Lit_Chars val:'\t ) &&\n' span_id:1497) (Token id: Id.Lit_Chars val: '\t git submodule update --recursive deeper/submodule >actual &&\n' span_id: 1498 ) (Token id: Id.Lit_Chars val: '\t test_i18ngrep "Submodule path .deeper/submodule/subsubmodule.: checked out" actual\n' span_id: 1499 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1500) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule update can be run in parallel' span_id:1507))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1511) (Token id:Id.Lit_Chars val:'\t(cd super2 &&\n' span_id:1512) (Token id: Id.Lit_Chars val: '\t GIT_TRACE=$(pwd)/trace.out git submodule update --jobs 7 &&\n' span_id: 1513 ) (Token id:Id.Lit_Chars val:'\t grep "7 tasks" trace.out &&\n' span_id:1514) (Token id: Id.Lit_Chars val: '\t git config submodule.fetchJobs 8 &&\n' span_id: 1515 ) (Token id:Id.Lit_Chars val:'\t GIT_TRACE=$(pwd)/trace.out git submodule update &&\n' span_id:1516) (Token id:Id.Lit_Chars val:'\t grep "8 tasks" trace.out &&\n' span_id:1517) (Token id: Id.Lit_Chars val: '\t GIT_TRACE=$(pwd)/trace.out git submodule update --jobs 9 &&\n' span_id: 1518 ) (Token id:Id.Lit_Chars val:'\t grep "9 tasks" trace.out\n' span_id:1519) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1520) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git clone passes the parallel jobs config on to submodules' span_id: 1527 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1531) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -rf super4" &&\n' span_id: 1532 ) (Token id: Id.Lit_Chars val: '\tGIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules --jobs 7 . super4 &&\n' span_id: 1533 ) (Token id:Id.Lit_Chars val:'\tgrep "7 tasks" trace.out &&\n' span_id:1534) (Token id:Id.Lit_Chars val:'\trm -rf super4 &&\n' span_id:1535) (Token id:Id.Lit_Chars val:'\tgit config --global submodule.fetchJobs 8 &&\n' span_id:1536) (Token id: Id.Lit_Chars val: '\tGIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules . super4 &&\n' span_id: 1537 ) (Token id:Id.Lit_Chars val:'\tgrep "8 tasks" trace.out &&\n' span_id:1538) (Token id:Id.Lit_Chars val:'\trm -rf super4 &&\n' span_id:1539) (Token id: Id.Lit_Chars val: '\tGIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules --jobs 9 . super4 &&\n' span_id: 1540 ) (Token id:Id.Lit_Chars val:'\tgrep "9 tasks" trace.out &&\n' span_id:1541) (Token id:Id.Lit_Chars val:'\trm -rf super4\n' span_id:1542) ) } ) (C {(test_done)}) ] )