(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'selecting remote repo in ambiguous cases'>)} spids: [4] ) ] ) (C {<.>} {<'./test-lib.sh'>}) (command.ShFunction name: reset body: (BraceGroup children:[(C {<rm>} {<-rf>} {<foo>} {<foo.git>} {<fetch>} {<clone>})]) ) (command.ShFunction name: make_tree body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<git>} {<init>} {(DQ ($ Id.VSub_Number '$1'))}) (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<cd>} {(DQ ($ Id.VSub_Number '$1'))}) (C {<test_commit>} {(DQ ($ Id.VSub_Number '$1'))}) ] ) ) ] ) ] ) ) (command.ShFunction name: make_bare body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<git>} {<init>} {<--bare>} {(DQ ($ Id.VSub_Number '$1'))}) (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {<cd>} {(DQ ($ Id.VSub_Number '$1'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tree) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<git>} {<hash-object>} {<-w>} {<-t>} {<tree>} {<'/dev/null'>}) ) } spids: [103] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:commit) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_Number '$1'))}) (C {<git>} {<commit-tree>} {($ Id.VSub_DollarName '$tree')}) ] negated: F ) ) } spids: [121] ) ] ) (C {<git>} {<update-ref>} {<HEAD>} {($ Id.VSub_DollarName '$commit')}) ] ) ) ] ) ] ) ) (command.ShFunction name: get body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {<git>} {<init>} {<--bare>} {<fetch>}) (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<cd>} {<fetch>}) (C {<git>} {<fetch>} {(DQ <'../'> ($ Id.VSub_Number '$1'))}) ] ) ) (C {<git>} {<clone>} {(DQ ($ Id.VSub_Number '$1'))} {<clone>}) ] ) ] ) ) (command.ShFunction name: check body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})] do_fork: T ) (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<cd>} {<fetch>}) (C {<git>} {<log>} {<-1>} {<--format> <Id.Lit_Equals '='> <Id.Lit_Other '%'> <s>} {<FETCH_HEAD>} ) ] ) redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<actual.fetch>} ) ] ) (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<cd>} {<clone>}) (C {<git>} {<log>} {<-1>} {<--format> <Id.Lit_Equals '='> <Id.Lit_Other '%'> <s>} {<HEAD>} ) ] ) redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<actual.clone>} ) ] ) (C {<test_cmp>} {<expect>} {<actual.fetch>}) (C {<test_cmp>} {<expect>} {<actual.clone>}) ] ) ] ) ) (C {<test_expect_success>} {(SQ <'find .git dir in worktree'>)} {(SQ <'\n'> <'\treset &&\n'> <'\tmake_tree foo &&\n'> <'\tget foo &&\n'> <'\tcheck foo\n'>)} ) (C {<test_expect_success>} {(SQ <'automagically add .git suffix'>)} { (SQ <'\n'> <'\treset &&\n'> <'\tmake_bare foo.git &&\n'> <'\tget foo &&\n'> <'\tcheck foo.git\n'>) } ) (C {<test_expect_success>} {(SQ <'automagically add .git suffix to worktree'>)} { (SQ <'\n'> <'\treset &&\n'> <'\tmake_tree foo.git &&\n'> <'\tget foo &&\n'> <'\tcheck foo.git\n'>) } ) (C {<test_expect_success>} {(SQ <'prefer worktree foo over bare foo.git'>)} { (SQ <'\n'> <'\treset &&\n'> <'\tmake_tree foo &&\n'> <'\tmake_bare foo.git &&\n'> <'\tget foo &&\n'> <'\tcheck foo\n'> ) } ) (C {<test_expect_success>} {(SQ <'prefer bare foo over bare foo.git'>)} { (SQ <'\n'> <'\treset &&\n'> <'\tmake_bare foo &&\n'> <'\tmake_bare foo.git &&\n'> <'\tget foo &&\n'> <'\tcheck foo\n'> ) } ) (C {<test_expect_success>} {(SQ <'disambiguate with full foo.git'>)} { (SQ <'\n'> <'\treset &&\n'> <'\tmake_bare foo &&\n'> <'\tmake_bare foo.git &&\n'> <'\tget foo.git &&\n'> <'\tcheck foo.git\n'> ) } ) (C {<test_expect_success>} {(SQ <'we are not fooled by non-git foo directory'>)} { (SQ <'\n'> <'\treset &&\n'> <'\tmake_bare foo.git &&\n'> <'\tmkdir foo &&\n'> <'\tget foo &&\n'> <'\tcheck foo.git\n'> ) } ) (C {<test_expect_success>} {(SQ <'prefer inner .git over outer bare'>)} { (SQ <'\n'> <'\treset &&\n'> <'\tmake_tree foo &&\n'> <'\tmake_bare foo.git &&\n'> <'\tmv foo/.git foo.git &&\n'> <'\tget foo.git &&\n'> <'\tcheck foo\n'> ) } ) (C {<test_done>}) ] )