(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>})
  ]
)