(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:'git init' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: check_config body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-d)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(test)} {(-f)} {(DQ ($ Id.VSub_Number '$1') (/config))}) (C {(test)} {(-d)} {(DQ ($ Id.VSub_Number '$1') (/refs))}) ] ) ] action: [(C {(Id.Lit_Other ':')} {(happy)})] spids: [23 56] ) ] else_action: [ (C {(echo)} { (DQ ('expected a directory ') ($ Id.VSub_Number '$1') (', a file ') ($ Id.VSub_Number '$1') ('/config and ') ($ Id.VSub_Number '$1') (/refs) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:80) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test_have_prereq)} {(POSIXPERM)}) (C {(test)} {(-x)} {(DQ ($ Id.VSub_Number '$1') (/config))}) ] ) ] action: [ (C {(echo)} {(DQ ($ Id.VSub_Number '$1') ('/config is executable?'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:118) arg_word: {(1)} ) ] spids: [89 107] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bare) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:128) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(cd)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(git)} {(config)} {(--bool)} {(core.bare)}) ] ) ] ) ) } spids: [127] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:worktree) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:148) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(cd)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(git)} {(config)} {(core.worktree)}) ] ) ] ) ) } spids: [147] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:worktree) op: assign_op.Equal rhs: {(unset)} spids: [167] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$bare'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_Number '$2'))} ) (C {(test)} {(DQ ($ Id.VSub_DollarName '$worktree'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_Number '$3'))} ) (command.BraceGroup children: [ (C {(echo)} { (DQ ('expected bare=') ($ Id.VSub_Number '$2') (' worktree=') ($ Id.VSub_Number '$3') ) } ) (C {(echo)} { (DQ (' got bare=') ($ Id.VSub_DollarName '$bare') (' worktree=') ($ Id.VSub_DollarName '$worktree') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:223) arg_word: {(1)} ) ] ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:plain span_id:236))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:240) (Token id:Id.Lit_Chars val:'\tgit init plain &&\n' span_id:241) (Token id:Id.Lit_Chars val:'\tcheck_config plain/.git false unset\n' span_id:242) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'plain nested in bare' span_id:249))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:253) (Token id:Id.Lit_Chars val:'\t(\n' span_id:254) (Token id:Id.Lit_Chars val:'\t\tgit init --bare bare-ancestor.git &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\t\tcd bare-ancestor.git &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\t\tmkdir plain-nested &&\n' span_id:257) (Token id:Id.Lit_Chars val:'\t\tcd plain-nested &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\t\tgit init\n' span_id:259) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:260) (Token id: Id.Lit_Chars val: '\tcheck_config bare-ancestor.git/plain-nested/.git false unset\n' span_id: 261 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'plain through aliased command, outside any git repo' span_id: 268 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:272) (Token id:Id.Lit_Chars val:'\t(\n' span_id:273) (Token id:Id.Lit_Chars val:'\t\tHOME=$(pwd)/alias-config &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\t\texport HOME &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\t\tmkdir alias-config &&\n' span_id:276) (Token id: Id.Lit_Chars val: '\t\techo "[alias] aliasedinit = init" >alias-config/.gitconfig &&\n' span_id: 277 ) (Token id:Id.Lit_Chars val:'\n' span_id:278) (Token id:Id.Lit_Chars val:'\t\tGIT_CEILING_DIRECTORIES=$(pwd) &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\n' span_id:281) (Token id:Id.Lit_Chars val:'\t\tmkdir plain-aliased &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t\tcd plain-aliased &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\t\tgit aliasedinit\n' span_id:284) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\tcheck_config plain-aliased/.git false unset\n' span_id:286) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'plain nested through aliased command' span_id:293))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:297) (Token id:Id.Lit_Chars val:'\t(\n' span_id:298) (Token id:Id.Lit_Chars val:'\t\tgit init plain-ancestor-aliased &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\t\tcd plain-ancestor-aliased &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\t\techo "[alias] aliasedinit = init" >>.git/config &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\t\tmkdir plain-nested &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\t\tcd plain-nested &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\t\tgit aliasedinit\n' span_id:304) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:305) (Token id: Id.Lit_Chars val: '\tcheck_config plain-ancestor-aliased/plain-nested/.git false unset\n' span_id: 306 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'plain nested in bare through aliased command' span_id:313))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:317) (Token id:Id.Lit_Chars val:'\t(\n' span_id:318) (Token id:Id.Lit_Chars val:'\t\tgit init --bare bare-ancestor-aliased.git &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\t\tcd bare-ancestor-aliased.git &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\t\techo "[alias] aliasedinit = init" >>config &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\t\tmkdir plain-nested &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\t\tcd plain-nested &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\t\tgit aliasedinit\n' span_id:324) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:325) (Token id: Id.Lit_Chars val: '\tcheck_config bare-ancestor-aliased.git/plain-nested/.git false unset\n' span_id: 326 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'No extra GIT_* on alias scripts' span_id:333))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:337) (Token id:Id.Lit_Chars val:'\twrite_script script <<-\\EOF &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\tenv |\n' span_id:339) (Token id:Id.Lit_Chars val:'\t\tsed -n \\\n' span_id:340) (Token id:Id.Lit_Chars val:'\t\t\t-e "/^GIT_PREFIX=/d" \\\n' span_id:341) (Token id:Id.Lit_Chars val:'\t\t\t-e "/^GIT_TEXTDOMAINDIR=/d" \\\n' span_id:342) (Token id:Id.Lit_Chars val:'\t\t\t-e "/^GIT_/s/=.*//p" |\n' span_id:343) (Token id:Id.Lit_Chars val:'\t\tsort\n' span_id:344) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:345) (Token id:Id.Lit_Chars val:'\t./script >expected &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\tgit config alias.script \\!./script &&\n' span_id:347) (Token id: Id.Lit_Chars val: '\t( mkdir sub && cd sub && git script >../actual ) &&\n' span_id: 348 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:349) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'plain with GIT_WORK_TREE' span_id:356))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:360) (Token id:Id.Lit_Chars val:'\tmkdir plain-wt &&\n' span_id:361) (Token id: Id.Lit_Chars val: '\ttest_must_fail env GIT_WORK_TREE="$(pwd)/plain-wt" git init plain-wt\n' span_id: 362 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'plain bare' span_id:369))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:373) (Token id:Id.Lit_Chars val:'\tgit --bare init plain-bare-1 &&\n' span_id:374) (Token id:Id.Lit_Chars val:'\tcheck_config plain-bare-1 true unset\n' span_id:375) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'plain bare with GIT_WORK_TREE' span_id:382))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:386) (Token id:Id.Lit_Chars val:'\tmkdir plain-bare-2 &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\ttest_must_fail \\\n' span_id:388) (Token id: Id.Lit_Chars val: '\t\tenv GIT_WORK_TREE="$(pwd)/plain-bare-2" \\\n' span_id: 389 ) (Token id:Id.Lit_Chars val:'\t\tgit --bare init plain-bare-2\n' span_id:390) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'GIT_DIR bare' span_id:397))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:401) (Token id:Id.Lit_Chars val:'\tmkdir git-dir-bare.git &&\n' span_id:402) (Token id:Id.Lit_Chars val:'\tGIT_DIR=git-dir-bare.git git init &&\n' span_id:403) (Token id: Id.Lit_Chars val: '\tcheck_config git-dir-bare.git true unset\n' span_id: 404 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init --bare' span_id:411))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:415) (Token id:Id.Lit_Chars val:'\tgit init --bare init-bare.git &&\n' span_id:416) (Token id:Id.Lit_Chars val:'\tcheck_config init-bare.git true unset\n' span_id:417) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'GIT_DIR non-bare' span_id:424))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:428) (Token id:Id.Lit_Chars val:'\n' span_id:429) (Token id:Id.Lit_Chars val:'\t(\n' span_id:430) (Token id:Id.Lit_Chars val:'\t\tmkdir non-bare &&\n' span_id:431) (Token id:Id.Lit_Chars val:'\t\tcd non-bare &&\n' span_id:432) (Token id:Id.Lit_Chars val:'\t\tGIT_DIR=.git git init\n' span_id:433) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\tcheck_config non-bare/.git false unset\n' span_id:435) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'GIT_DIR & GIT_WORK_TREE (1)' span_id:442))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:446) (Token id:Id.Lit_Chars val:'\n' span_id:447) (Token id:Id.Lit_Chars val:'\t(\n' span_id:448) (Token id:Id.Lit_Chars val:'\t\tmkdir git-dir-wt-1.git &&\n' span_id:449) (Token id: Id.Lit_Chars val: '\t\tGIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-1.git git init\n' span_id: 450 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:451) (Token id: Id.Lit_Chars val: '\tcheck_config git-dir-wt-1.git false "$(pwd)"\n' span_id: 452 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'GIT_DIR & GIT_WORK_TREE (2)' span_id:459))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:463) (Token id:Id.Lit_Chars val:'\tmkdir git-dir-wt-2.git &&\n' span_id:464) (Token id:Id.Lit_Chars val:'\ttest_must_fail env \\\n' span_id:465) (Token id:Id.Lit_Chars val:'\t\tGIT_WORK_TREE="$(pwd)" \\\n' span_id:466) (Token id:Id.Lit_Chars val:'\t\tGIT_DIR=git-dir-wt-2.git \\\n' span_id:467) (Token id:Id.Lit_Chars val:'\t\tgit --bare init\n' span_id:468) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:reinit span_id:475))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:479) (Token id:Id.Lit_Chars val:'\n' span_id:480) (Token id:Id.Lit_Chars val:'\t(\n' span_id:481) (Token id:Id.Lit_Chars val:'\t\tmkdir again &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\t\tcd again &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\t\tgit init >out1 2>err1 &&\n' span_id:484) (Token id:Id.Lit_Chars val:'\t\tgit init >out2 2>err2\n' span_id:485) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:486) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Initialized empty" again/out1 &&\n' span_id: 487 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Reinitialized existing" again/out2 &&\n' span_id:488) (Token id:Id.Lit_Chars val:'\t>again/empty &&\n' span_id:489) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp again/empty again/err1 &&\n' span_id:490) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp again/empty again/err2\n' span_id:491) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init with --template' span_id:498))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:502) (Token id:Id.Lit_Chars val:'\tmkdir template-source &&\n' span_id:503) (Token id:Id.Lit_Chars val:'\techo content >template-source/file &&\n' span_id:504) (Token id: Id.Lit_Chars val: '\tgit init --template=../template-source template-custom &&\n' span_id: 505 ) (Token id:Id.Lit_Chars val:'\ttest_cmp template-source/file template-custom/.git/file\n' span_id:506) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init with --template (blank)' span_id:513))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:517) (Token id:Id.Lit_Chars val:'\tgit init template-plain &&\n' span_id:518) (Token id:Id.Lit_Chars val:'\ttest_path_is_file template-plain/.git/info/exclude &&\n' span_id:519) (Token id: Id.Lit_Chars val: '\tgit init --template= template-blank &&\n' span_id: 520 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing template-blank/.git/info/exclude\n' span_id:521) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init with init.templatedir set' span_id:528))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:532) (Token id:Id.Lit_Chars val:'\tmkdir templatedir-source &&\n' span_id:533) (Token id:Id.Lit_Chars val:'\techo Content >templatedir-source/file &&\n' span_id:534) (Token id: Id.Lit_Chars val: '\ttest_config_global init.templatedir "${HOME}/templatedir-source" &&\n' span_id: 535 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:536) (Token id:Id.Lit_Chars val:'\t\tmkdir templatedir-set &&\n' span_id:537) (Token id:Id.Lit_Chars val:'\t\tcd templatedir-set &&\n' span_id:538) (Token id:Id.Lit_Chars val:'\t\tsane_unset GIT_TEMPLATE_DIR &&\n' span_id:539) (Token id:Id.Lit_Chars val:'\t\tNO_SET_GIT_TEMPLATE_DIR=t &&\n' span_id:540) (Token id:Id.Lit_Chars val:'\t\texport NO_SET_GIT_TEMPLATE_DIR &&\n' span_id:541) (Token id:Id.Lit_Chars val:'\t\tgit init\n' span_id:542) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:543) (Token id: Id.Lit_Chars val: '\ttest_cmp templatedir-source/file templatedir-set/.git/file\n' span_id: 544 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'init --bare/--shared overrides system/global config' span_id: 551 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:555) (Token id: Id.Lit_Chars val: '\ttest_config_global core.bare false &&\n' span_id: 556 ) (Token id:Id.Lit_Chars val:'\ttest_config_global core.sharedRepository 0640 &&\n' span_id:557) (Token id: Id.Lit_Chars val: '\tgit init --bare --shared=0666 init-bare-shared-override &&\n' span_id: 558 ) (Token id:Id.Lit_Chars val:'\tcheck_config init-bare-shared-override true unset &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\ttest x0666 = \\\n' span_id:560) (Token id: Id.Lit_Chars val: '\tx$(git config -f init-bare-shared-override/config core.sharedRepository)\n' span_id: 561 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init honors global core.sharedRepository' span_id:568))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:572) (Token id: Id.Lit_Chars val: '\ttest_config_global core.sharedRepository 0666 &&\n' span_id: 573 ) (Token id:Id.Lit_Chars val:'\tgit init shared-honor-global &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\ttest x0666 = \\\n' span_id:575) (Token id: Id.Lit_Chars val: '\tx$(git config -f shared-honor-global/.git/config core.sharedRepository)\n' span_id: 576 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init allows insanely long --template' span_id:583))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:587) (Token id: Id.Lit_Chars val: '\tgit init --template=$(printf "x%09999dx" 1) test\n' span_id: 588 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init creates a new directory' span_id:595))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:599) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:600) (Token id:Id.Lit_Chars val:'\tgit init newdir &&\n' span_id:601) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir newdir/.git/refs\n' span_id:602) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init creates a new bare directory' span_id:609))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:613) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:614) (Token id:Id.Lit_Chars val:'\tgit init --bare newdir &&\n' span_id:615) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir newdir/refs\n' span_id:616) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init recreates a directory' span_id:623))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:627) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\tmkdir newdir &&\n' span_id:629) (Token id:Id.Lit_Chars val:'\tgit init newdir &&\n' span_id:630) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir newdir/.git/refs\n' span_id:631) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init recreates a new bare directory' span_id:638))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:642) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:643) (Token id:Id.Lit_Chars val:'\tmkdir newdir &&\n' span_id:644) (Token id:Id.Lit_Chars val:'\tgit init --bare newdir &&\n' span_id:645) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir newdir/refs\n' span_id:646) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init creates a new deep directory' span_id:653))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:657) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:658) (Token id:Id.Lit_Chars val:'\tgit init newdir/a/b/c &&\n' span_id:659) (Token id: Id.Lit_Chars val: '\ttest_path_is_dir newdir/a/b/c/.git/refs\n' span_id: 660 ) ) } ) (C {(test_expect_success)} {(POSIXPERM)} { (SQ (Token id: Id.Lit_Chars val: 'init creates a new deep directory (umask vs. shared)' span_id: 669 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:673) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:674) (Token id:Id.Lit_Chars val:'\t(\n' span_id:675) (Token id: Id.Lit_Chars val: '\t\t# Leading directories should honor umask while\n' span_id: 676 ) (Token id:Id.Lit_Chars val:'\t\t# the repository itself should follow "shared"\n' span_id:677) (Token id:Id.Lit_Chars val:'\t\tumask 002 &&\n' span_id:678) (Token id:Id.Lit_Chars val:'\t\tgit init --bare --shared=0660 newdir/a/b/c &&\n' span_id:679) (Token id: Id.Lit_Chars val: '\t\ttest_path_is_dir newdir/a/b/c/refs &&\n' span_id: 680 ) (Token id:Id.Lit_Chars val:'\t\tls -ld newdir/a newdir/a/b > lsab.out &&\n' span_id:681) (Token id: Id.Lit_Chars val: '\t\t! grep -v "^drwxrw[sx]r-x" lsab.out &&\n' span_id: 682 ) (Token id:Id.Lit_Chars val:'\t\tls -ld newdir/a/b/c > lsc.out &&\n' span_id:683) (Token id: Id.Lit_Chars val: '\t\t! grep -v "^drwxrw[sx]---" lsc.out\n' span_id: 684 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:685) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init notices EEXIST (1)' span_id:692))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:696) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:697) (Token id:Id.Lit_Chars val:'\t>newdir &&\n' span_id:698) (Token id:Id.Lit_Chars val:'\ttest_must_fail git init newdir &&\n' span_id:699) (Token id:Id.Lit_Chars val:'\ttest_path_is_file newdir\n' span_id:700) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init notices EEXIST (2)' span_id:707))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:711) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:712) (Token id:Id.Lit_Chars val:'\tmkdir newdir &&\n' span_id:713) (Token id:Id.Lit_Chars val:'\t>newdir/a &&\n' span_id:714) (Token id:Id.Lit_Chars val:'\ttest_must_fail git init newdir/a/b &&\n' span_id:715) (Token id:Id.Lit_Chars val:'\ttest_path_is_file newdir/a\n' span_id:716) ) } ) (C {(test_expect_success)} {(POSIXPERM) (Id.Lit_Comma ',') (SANITY)} {(SQ (Token id:Id.Lit_Chars val:'init notices EPERM' span_id:727))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:731) (Token id:Id.Lit_Chars val:'\trm -fr newdir &&\n' span_id:732) (Token id:Id.Lit_Chars val:'\tmkdir newdir &&\n' span_id:733) (Token id:Id.Lit_Chars val:'\tchmod -w newdir &&\n' span_id:734) (Token id:Id.Lit_Chars val:'\ttest_must_fail git init newdir/a/b\n' span_id:735) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'init creates a new bare directory with global --bare' span_id: 742 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:746) (Token id:Id.Lit_Chars val:'\trm -rf newdir &&\n' span_id:747) (Token id:Id.Lit_Chars val:'\tgit --bare init newdir &&\n' span_id:748) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir newdir/refs\n' span_id:749) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init prefers command line to GIT_DIR' span_id:756))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:760) (Token id:Id.Lit_Chars val:'\trm -rf newdir &&\n' span_id:761) (Token id:Id.Lit_Chars val:'\tmkdir otherdir &&\n' span_id:762) (Token id: Id.Lit_Chars val: '\tGIT_DIR=otherdir git --bare init newdir &&\n' span_id: 763 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir newdir/refs &&\n' span_id:764) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing otherdir/refs\n' span_id:765) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init with separate gitdir' span_id:772))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:776) (Token id:Id.Lit_Chars val:'\trm -rf newdir &&\n' span_id:777) (Token id:Id.Lit_Chars val:'\tgit init --separate-git-dir realgitdir newdir &&\n' span_id:778) (Token id: Id.Lit_Chars val: '\techo "gitdir: $(pwd)/realgitdir" >expected &&\n' span_id: 779 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected newdir/.git &&\n' span_id:780) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir realgitdir/refs\n' span_id:781) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'re-init on .git file' span_id:788))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:792) (Token id:Id.Lit_Chars val:'\t( cd newdir && git init )\n' span_id:793) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'re-init to update git link' span_id:800))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:804) (Token id:Id.Lit_Chars val:'\t(\n' span_id:805) (Token id:Id.Lit_Chars val:'\tcd newdir &&\n' span_id:806) (Token id: Id.Lit_Chars val: '\tgit init --separate-git-dir ../surrealgitdir\n' span_id: 807 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:808) (Token id: Id.Lit_Chars val: '\techo "gitdir: $(pwd)/surrealgitdir" >expected &&\n' span_id: 809 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected newdir/.git &&\n' span_id:810) (Token id: Id.Lit_Chars val: '\ttest_path_is_dir surrealgitdir/refs &&\n' span_id: 811 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing realgitdir/refs\n' span_id:812) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'re-init to move gitdir' span_id:819))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:823) (Token id: Id.Lit_Chars val: '\trm -rf newdir realgitdir surrealgitdir &&\n' span_id: 824 ) (Token id:Id.Lit_Chars val:'\tgit init newdir &&\n' span_id:825) (Token id:Id.Lit_Chars val:'\t(\n' span_id:826) (Token id:Id.Lit_Chars val:'\tcd newdir &&\n' span_id:827) (Token id: Id.Lit_Chars val: '\tgit init --separate-git-dir ../realgitdir\n' span_id: 828 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:829) (Token id: Id.Lit_Chars val: '\techo "gitdir: $(pwd)/realgitdir" >expected &&\n' span_id: 830 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected newdir/.git &&\n' span_id:831) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir realgitdir/refs\n' span_id:832) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'re-init to move gitdir symlink' span_id:841))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:845) (Token id:Id.Lit_Chars val:'\trm -rf newdir realgitdir &&\n' span_id:846) (Token id:Id.Lit_Chars val:'\tgit init newdir &&\n' span_id:847) (Token id:Id.Lit_Chars val:'\t(\n' span_id:848) (Token id:Id.Lit_Chars val:'\tcd newdir &&\n' span_id:849) (Token id:Id.Lit_Chars val:'\tmv .git here &&\n' span_id:850) (Token id:Id.Lit_Chars val:'\tln -s here .git &&\n' span_id:851) (Token id: Id.Lit_Chars val: '\tgit init --separate-git-dir ../realgitdir\n' span_id: 852 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:853) (Token id: Id.Lit_Chars val: '\techo "gitdir: $(pwd)/realgitdir" >expected &&\n' span_id: 854 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected newdir/.git &&\n' span_id:855) (Token id:Id.Lit_Chars val:'\ttest_cmp expected newdir/here &&\n' span_id:856) (Token id:Id.Lit_Chars val:'\ttest_path_is_dir realgitdir/refs\n' span_id:857) ) } ) (command.ShFunction name: is_hidden body: (command.BraceGroup children: [ (command.Case to_match: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:879) command_list: (command.CommandList children: [(C {(attrib)} {(DQ ($ Id.VSub_Number '$1'))})] ) ) ) } arms: [ (case_arm pat_list: [ {(Id.Lit_Star '*') (H) (Id.Lit_Star '*') (Id.Lit_QMark '?') (Id.Lit_Other ':') (Id.Lit_Star '*') } ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:898) arg_word: {(0)} ) ] spids: [890 896 901 -1] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:906) arg_word: {(1)} ) ] ) ) (C {(test_expect_success)} {(MINGW)} {(SQ (Token id:Id.Lit_Chars val:'.git hidden' span_id:918))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:922) (Token id:Id.Lit_Chars val:'\trm -rf newdir &&\n' span_id:923) (Token id:Id.Lit_Chars val:'\t(\n' span_id:924) (Token id:Id.Lit_Chars val:'\t\tunset GIT_DIR GIT_WORK_TREE\n' span_id:925) (Token id:Id.Lit_Chars val:'\t\tmkdir newdir &&\n' span_id:926) (Token id:Id.Lit_Chars val:'\t\tcd newdir &&\n' span_id:927) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:928) (Token id:Id.Lit_Chars val:'\t\tis_hidden .git\n' span_id:929) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:930) (Token id: Id.Lit_Chars val: '\tcheck_config newdir/.git false unset\n' span_id: 931 ) ) } ) (C {(test_expect_success)} {(MINGW)} {(SQ (Token id:Id.Lit_Chars val:'bare git dir not hidden' span_id:940))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:944) (Token id:Id.Lit_Chars val:'\trm -rf newdir &&\n' span_id:945) (Token id:Id.Lit_Chars val:'\t(\n' span_id:946) (Token id: Id.Lit_Chars val: '\t\tunset GIT_DIR GIT_WORK_TREE GIT_CONFIG\n' span_id: 947 ) (Token id:Id.Lit_Chars val:'\t\tmkdir newdir &&\n' span_id:948) (Token id:Id.Lit_Chars val:'\t\tcd newdir &&\n' span_id:949) (Token id:Id.Lit_Chars val:'\t\tgit --bare init\n' span_id:950) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:951) (Token id:Id.Lit_Chars val:'\t! is_hidden newdir\n' span_id:952) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'remote init from does not use config from cwd' span_id:959))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:963) (Token id:Id.Lit_Chars val:'\trm -rf newdir &&\n' span_id:964) (Token id:Id.Lit_Chars val:'\ttest_config core.logallrefupdates true &&\n' span_id:965) (Token id:Id.Lit_Chars val:'\tgit init newdir &&\n' span_id:966) (Token id:Id.Lit_Chars val:'\techo true >expect &&\n' span_id:967) (Token id: Id.Lit_Chars val: '\tgit -C newdir config --bool core.logallrefupdates >actual &&\n' span_id: 968 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:969) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'re-init from a linked worktree' span_id:976))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:980) (Token id:Id.Lit_Chars val:'\tgit init main-worktree &&\n' span_id:981) (Token id:Id.Lit_Chars val:'\t(\n' span_id:982) (Token id:Id.Lit_Chars val:'\t\tcd main-worktree &&\n' span_id:983) (Token id:Id.Lit_Chars val:'\t\ttest_commit first &&\n' span_id:984) (Token id: Id.Lit_Chars val: '\t\tgit worktree add ../linked-worktree &&\n' span_id: 985 ) (Token id:Id.Lit_Chars val:'\t\tmv .git/info/exclude expected-exclude &&\n' span_id:986) (Token id:Id.Lit_Chars val:'\t\tcp .git/config expected-config &&\n' span_id:987) (Token id:Id.Lit_Chars val:'\t\tfind .git/worktrees -print | sort >expected &&\n' span_id:988) (Token id:Id.Lit_Chars val:'\t\tgit -C ../linked-worktree init &&\n' span_id:989) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected-exclude .git/info/exclude &&\n' span_id:990) (Token id: Id.Lit_Chars val: '\t\ttest_cmp expected-config .git/config &&\n' span_id: 991 ) (Token id:Id.Lit_Chars val:'\t\tfind .git/worktrees -print | sort >actual &&\n' span_id:992) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:993) (Token id:Id.Lit_Chars val:'\t)\n' span_id:994) ) } ) (C {(test_done)}) ] )