(command.CommandList children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:test_description) 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'> ) } ) ] ) (C {(.)} {(./test-lib.sh)}) (command.FuncDef name: test_cmp_val body: (command.BraceGroup children: [ (command.SimpleCommand words: [{(echo)} {(DQ ($ VSub_Number '$1'))}] redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expected)})] ) (command.SimpleCommand words: [{(echo)} {(DQ ($ VSub_Number '$2'))}] redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(result)})] ) (C {(test_cmp)} {(expected)} {(result)}) ] ) ) (command.FuncDef name: test_vars body: (command.BraceGroup children: [ (C {(test_expect_success)} {(DQ ($ VSub_Number '$1') (': gitdir'))} {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ VSub_Number '$2')) (SQ <'" "$(git rev-parse --git-dir)"\n'> <'\t'>) } ) (C {(test_expect_success)} {(DQ ($ VSub_Number '$1') (': worktree'))} {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ VSub_Number '$3')) (SQ <'" "$(git rev-parse --show-toplevel)"\n'> <'\t'>) } ) (C {(test_expect_success)} {(DQ ($ VSub_Number '$1') (': prefix'))} {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ VSub_Number '$4')) (SQ <'" "$(git rev-parse --show-prefix)"\n'> <'\t'>) } ) ] ) ) (command.FuncDef name: test_foobar_root body: (command.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.FuncDef name: test_foobar_foo body: (command.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.FuncDef name: test_foobar_foobar body: (command.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.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:skip_all) op: Equal rhs: {(DQ ('Test requiring writable / skipped. Read this test if you want to run it'))} ) ] ) (C {(test_done)}) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Op_DPipe Op_DPipe Op_DPipe Op_DPipe Op_DPipe 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.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:skip_all) op: Equal rhs: {(DQ ('Skip test that clobbers existing files in /'))} ) ] ) (C {(test_done)}) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$IKNOWWHATIAMDOING'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (YES))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:skip_all) op: Equal rhs: {(DQ ('You must set env var IKNOWWHATIAMDOING=YES in order to run this test'))} ) ] ) (C {(test_done)}) ] ) ] ) (command.If arms: [ (if_arm cond: [(command.Pipeline children:[(C {(test_have_prereq)} {(NOT_ROOT)})] negated:T)] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:skip_all) op: Equal rhs: {(DQ ("No you can't run this as root"))} ) ] ) (C {(test_done)}) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:ONE_SHA1) op: Equal rhs: {(d00491fd7e5bb6fa28c517a0bb32b8b506539d4d)} ) ] ) (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.SimpleCommand words: [{(cat)}] redirects: [ (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(ls.expected)}) (redir.HereDoc op: <Redir_DLess '<<'> fd: 16777215 here_begin: {(EOF)} here_end_span_id: 481 stdin_parts: [ ('100644 ') ($ VSub_DollarName '$ONE_SHA1') (' 0\tfoo/bar/barme\n') ('100644 ') ($ VSub_DollarName '$ONE_SHA1') (' 0\tfoo/foome\n') ('100644 ') ($ VSub_DollarName '$ONE_SHA1') (' 0\tme\n') ] ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:GIT_DIR) op: Equal rhs: {(DQ ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))} ) ] ) (C {(export)} {(GIT_DIR)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})] ) (C {(export)} {(GIT_WORK_TREE)}) ] ) (C {(test_vars)} {(SQ <'abs gitdir, root'>)} {(DQ ($ 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 ($ 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 ($ 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: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:GIT_DIR) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ VSub_DollarName '$TRASH_DIRECTORY')}) (C {(sed)} {(SQ <'s,^/,,'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) (/.git) ) } ) ] ) (C {(export)} {(GIT_DIR)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})] ) (C {(export)} {(GIT_WORK_TREE)}) ] ) (C {(test_vars)} {(SQ <'rel gitdir, root'>)} {(DQ ($ VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )}) (C {(test_foobar_root)}) (C {(test_expect_success)} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)}) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:GIT_DIR) op: Equal rhs: {(DQ (../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))} ) ] ) (C {(export)} {(GIT_DIR)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})] ) (C {(export)} {(GIT_WORK_TREE)}) ] ) (C {(test_vars)} {(SQ <'rel gitdir, foo'>)} {(DQ ($ 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: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:GIT_DIR) op: Equal rhs: {(DQ (../../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))} ) ] ) (C {(export)} {(GIT_DIR)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})] ) (C {(export)} {(GIT_WORK_TREE)}) ] ) (C {(test_vars)} {(SQ <'rel gitdir, foo/bar'>)} {(DQ ($ 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: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:GIT_DIR) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ VSub_DollarName '$TRASH_DIRECTORY')}) (C {(sed)} {(SQ <'s,^/,,'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) (/.git) ) } ) ] ) (C {(export)} {(GIT_DIR)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(.)})] ) (C {(export)} {(GIT_WORK_TREE)}) ] ) (C {(test_vars)} {(SQ <'rel gitdir, root'>)} {(DQ ($ VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )}) (C {(test_foobar_root)}) (C {(test_expect_success)} {(SQ <'go to /'>)} {(SQ <'cd /foo'>)}) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:GIT_DIR) op: Equal rhs: {(DQ (../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))} ) ] ) (C {(export)} {(GIT_DIR)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(..)})] ) (C {(export)} {(GIT_WORK_TREE)}) ] ) (C {(test_vars)} {(SQ <'rel gitdir, foo'>)} {(DQ ($ 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: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:GIT_DIR) op: Equal rhs: {(DQ (../../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))} ) ] ) (C {(export)} {(GIT_DIR)}) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(../..)})] ) (C {(export)} {(GIT_WORK_TREE)}) ] ) (C {(test_vars)} {(SQ <'rel gitdir, foo/bar'>)} {(DQ ($ 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)}) ] )