(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ <'Test Git when git repository is located at root\n'> <'\n'> <'This test requires write access in root. Do not bother if you do not\n'> <'have a throwaway chroot or VM.\n'> <'\n'> <'Script t1509/prepare-chroot.sh may help you setup chroot, then you\n'> <'can chroot in and execute this test from there.\n'> ) } spids: [4] ) ] ) (C {<.>} {<'./test-lib.sh'>}) (command.ShFunction name: test_cmp_val body: (BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})] do_fork: T ) (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_Number '$2'))}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<result>})] do_fork: T ) (C {<test_cmp>} {<expected>} {<result>}) ] ) ) (command.ShFunction name: test_vars body: (BraceGroup children: [ (C {<test_expect_success>} {(DQ ($ Id.VSub_Number '$1') <': gitdir'>)} {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ Id.VSub_Number '$2')) (SQ <'" "$(git rev-parse --git-dir)"\n'> <'\t'>) } ) (C {<test_expect_success>} {(DQ ($ Id.VSub_Number '$1') <': worktree'>)} {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ Id.VSub_Number '$3')) (SQ <'" "$(git rev-parse --show-toplevel)"\n'> <'\t'>) } ) (C {<test_expect_success>} {(DQ ($ Id.VSub_Number '$1') <': prefix'>)} {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ Id.VSub_Number '$4')) (SQ <'" "$(git rev-parse --show-prefix)"\n'> <'\t'>) } ) ] ) ) (command.ShFunction name: test_foobar_root body: (BraceGroup children: [ (C {<test_expect_success>} {(SQ <'add relative'>)} { (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add foo/foome &&\n'> <'\t\tgit add foo/bar/barme &&\n'> <'\t\tgit add me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'> ) } ) (C {<test_expect_success>} {(SQ <'add absolute'>)} { (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add /foo/foome &&\n'> <'\t\tgit add /foo/bar/barme &&\n'> <'\t\tgit add /me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'> ) } ) ] ) ) (command.ShFunction name: test_foobar_foo body: (BraceGroup children: [ (C {<test_expect_success>} {(SQ <'add relative'>)} { (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add foome &&\n'> <'\t\tgit add bar/barme &&\n'> <'\t\tgit add ../me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'> ) } ) (C {<test_expect_success>} {(SQ <'add absolute'>)} { (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add /foo/foome &&\n'> <'\t\tgit add /foo/bar/barme &&\n'> <'\t\tgit add /me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'> ) } ) ] ) ) (command.ShFunction name: test_foobar_foobar body: (BraceGroup children: [ (C {<test_expect_success>} {(SQ <'add relative'>)} { (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add ../foome &&\n'> <'\t\tgit add barme &&\n'> <'\t\tgit add ../../me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'> ) } ) (C {<test_expect_success>} {(SQ <'add absolute'>)} { (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add /foo/foome &&\n'> <'\t\tgit add /foo/bar/barme &&\n'> <'\t\tgit add /me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'> ) } ) ] ) ) (command.If arms: [ (if_arm cond: [(command.Pipeline children:[(C {<test>} {<-w>} {<'/'>})] negated:T)] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ <'Test requiring writable / skipped. Read this test if you want to run it'>)} spids: [288] ) ] ) (C {<test_done>}) ] spids: [275 285] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe] children: [ (C {<test>} {<-e>} {<'/refs'>}) (C {<test>} {<-e>} {<'/objects'>}) (C {<test>} {<-e>} {<'/info'>}) (C {<test>} {<-e>} {<'/hooks'>}) (C {<test>} {<-e>} {<'/.git'>}) (C {<test>} {<-e>} {<'/foo'>}) (C {<test>} {<-e>} {<'/me'>}) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ <'Skip test that clobbers existing files in /'>)} spids: [359] ) ] ) (C {<test_done>}) ] spids: [299 356] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$IKNOWWHATIAMDOING'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <YES>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ <'You must set env var IKNOWWHATIAMDOING=YES in order to run this test'>)} spids: [391] ) ] ) (C {<test_done>}) ] spids: [370 388] ) ] ) (command.If arms: [ (if_arm cond: [(command.Pipeline children:[(C {<test_have_prereq>} {<NOT_ROOT>})] negated:T)] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ <'No you can\'t run this as root'>)} spids: [413] ) ] ) (C {<test_done>}) ] spids: [402 410] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ONE_SHA1) op: assign_op.Equal rhs: {<d00491fd7e5bb6fa28c517a0bb32b8b506539d4d>} spids: [424] ) ] ) (C {<test_expect_success>} {(SQ <setup>)} { (SQ <'\n'> <'\trm -rf /foo &&\n'> <'\tmkdir /foo &&\n'> <'\tmkdir /foo/bar &&\n'> <'\techo 1 > /foo/foome &&\n'> <'\techo 1 > /foo/bar/barme &&\n'> <'\techo 1 > /me\n'> ) } ) (C {<say>} {(DQ <'GIT_DIR absolute, GIT_WORK_TREE set'>)}) (C {<test_expect_success>} {(SQ <'go to /'>)} {(SQ <'cd /'>)}) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<ls.expected>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 481 stdin_parts: [ <'100644 '> ($ Id.VSub_DollarName '$ONE_SHA1') <' 0\tfoo/bar/barme\n'> <'100644 '> ($ Id.VSub_DollarName '$ONE_SHA1') <' 0\tfoo/foome\n'> <'100644 '> ($ Id.VSub_DollarName '$ONE_SHA1') <' 0\tme\n'> ] ) ) ] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} spids: [483] ) ] ) (C {<export>} {<GIT_DIR>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE) op: assign_op.Equal rhs: {<'/'>} spids: [495] ) ] ) (C {<export>} {<GIT_WORK_TREE>}) ] ) (C {<test_vars>} {(SQ <'abs gitdir, root'>)} {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ <'/'>)} {(DQ )}) (C {<test_foobar_root>}) (C {<test_expect_success>} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)}) (C {<test_vars>} {(SQ <'abs gitdir, foo'>)} {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ <'/'>)} {(DQ <'foo/'>)} ) (C {<test_foobar_foo>}) (C {<test_expect_success>} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)}) (C {<test_vars>} {(SQ <'abs gitdir, foo/bar'>)} {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ <'/'>)} {(DQ <'foo/bar/'>)} ) (C {<test_foobar_foobar>}) (C {<say>} {(DQ <'GIT_DIR relative, GIT_WORK_TREE set'>)}) (C {<test_expect_success>} {(SQ <'go to /'>)} {(SQ <'cd /'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$TRASH_DIRECTORY')}) (C {<sed>} {(SQ <'s,^/,,'>)}) ] negated: F ) ) <'/.git'> ) } spids: [607] ) ] ) (C {<export>} {<GIT_DIR>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE) op: assign_op.Equal rhs: {<'/'>} spids: [629] ) ] ) (C {<export>} {<GIT_WORK_TREE>}) ] ) (C {<test_vars>} {(SQ <'rel gitdir, root'>)} {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ <'/'>)} {(DQ )}) (C {<test_foobar_root>}) (C {<test_expect_success>} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: {(DQ <'../'> ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} spids: [670] ) ] ) (C {<export>} {<GIT_DIR>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE) op: assign_op.Equal rhs: {<'/'>} spids: [683] ) ] ) (C {<export>} {<GIT_WORK_TREE>}) ] ) (C {<test_vars>} {(SQ <'rel gitdir, foo'>)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} {(DQ <'/'>)} {(DQ <'foo/'>)} ) (C {<test_foobar_foo>}) (C {<test_expect_success>} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: {(DQ <'../../'> ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} spids: [726] ) ] ) (C {<export>} {<GIT_DIR>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE) op: assign_op.Equal rhs: {<'/'>} spids: [739] ) ] ) (C {<export>} {<GIT_WORK_TREE>}) ] ) (C {<test_vars>} {(SQ <'rel gitdir, foo/bar'>)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} {(DQ <'/'>)} {(DQ <'foo/bar/'>)} ) (C {<test_foobar_foobar>}) (C {<say>} {(DQ <'GIT_DIR relative, GIT_WORK_TREE relative'>)}) (C {<test_expect_success>} {(SQ <'go to /'>)} {(SQ <'cd /'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$TRASH_DIRECTORY')}) (C {<sed>} {(SQ <'s,^/,,'>)}) ] negated: F ) ) <'/.git'> ) } spids: [789] ) ] ) (C {<export>} {<GIT_DIR>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE) op: assign_op.Equal rhs: {<.>} spids: [811] ) ] ) (C {<export>} {<GIT_WORK_TREE>}) ] ) (C {<test_vars>} {(SQ <'rel gitdir, root'>)} {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ <'/'>)} {(DQ )}) (C {<test_foobar_root>}) (C {<test_expect_success>} {(SQ <'go to /'>)} {(SQ <'cd /foo'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: {(DQ <'../'> ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} spids: [852] ) ] ) (C {<export>} {<GIT_DIR>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE) op: assign_op.Equal rhs: {<..>} spids: [865] ) ] ) (C {<export>} {<GIT_WORK_TREE>}) ] ) (C {<test_vars>} {(SQ <'rel gitdir, foo'>)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} {(DQ <'/'>)} {(DQ <'foo/'>)} ) (C {<test_foobar_foo>}) (C {<test_expect_success>} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: {(DQ <'../../'> ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} spids: [908] ) ] ) (C {<export>} {<GIT_DIR>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE) op: assign_op.Equal rhs: {<'../..'>} spids: [921] ) ] ) (C {<export>} {<GIT_WORK_TREE>}) ] ) (C {<test_vars>} {(SQ <'rel gitdir, foo/bar'>)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/.git'>)} {(DQ <'/'>)} {(DQ <'foo/bar/'>)} ) (C {<test_foobar_foobar>}) (C {<say>} {(DQ <'.git at root'>)}) (C {<unset>} {<GIT_DIR>}) (C {<unset>} {<GIT_WORK_TREE>}) (C {<test_expect_success>} {(SQ <'go to /'>)} {(SQ <'cd /'>)}) (C {<test_expect_success>} {(SQ <setup>)} { (SQ <'\n'> <'\trm -rf /.git &&\n'> <'\techo "Initialized empty Git repository in /.git/" > expected &&\n'> <'\tgit init > result &&\n'> <'\ttest_cmp expected result\n'> ) } ) (C {<test_vars>} {(SQ <'auto gitdir, root'>)} {(DQ <.git>)} {(DQ <'/'>)} {(DQ )}) (C {<test_foobar_root>}) (C {<test_expect_success>} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)}) (C {<test_vars>} {(SQ <'auto gitdir, foo'>)} {(DQ <'/.git'>)} {(DQ <'/'>)} {(DQ <'foo/'>)}) (C {<test_foobar_foo>}) (C {<test_expect_success>} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)}) (C {<test_vars>} {(SQ <'auto gitdir, foo/bar'>)} {(DQ <'/.git'>)} {(DQ <'/'>)} {(DQ <'foo/bar/'>)}) (C {<test_foobar_foobar>}) (C {<test_expect_success>} {(SQ <cleanup>)} {(SQ <'rm -rf /.git'>)}) (C {<say>} {(DQ <'auto bare gitdir'>)}) (C {<test_expect_success>} {(SQ <setup>)} { (SQ <'\n'> <'\trm -rf /refs /objects /info /hooks &&\n'> <'\trm -f /expected /ls.expected /me /result &&\n'> <'\tcd / &&\n'> <'\techo "Initialized empty Git repository in /" > expected &&\n'> <'\tgit init --bare > result &&\n'> <'\ttest_cmp expected result\n'> ) } ) (C {<test_vars>} {(SQ <'auto gitdir, root'>)} {(DQ <.>)} {(DQ )} {(DQ )}) (C {<test_expect_success>} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)}) (C {<test_vars>} {(SQ <'auto gitdir, root'>)} {(DQ <'/'>)} {(DQ )} {(DQ )}) (C {<test_done>}) ] )