(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"Test shared repository initialization">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (SimpleCommand
      words: [{(setfacl)} {(-k)} {(.)}]
      redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[33])]
    )
    (C {(test_expect_success)} {(SQ <"shared = 0400 (faulty permission u-w)">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished \"rm -rf sub\" &&\n"> <"\tmkdir sub && (\n"> 
          <"\t\tcd sub &&\n"> <"\t\ttest_must_fail git init --shared=0400\n"> <"\t)\n">
        )
      }
    )
    (FuncDef
      name: modebits
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(ls)} {(-l)} {(DQ ($ VSub_Number "$1"))})
                (C {(sed)} {(-e)} {(SQ <"s|^\\(..........\\).*|\\1|">)})
              ]
              negated: False
            )
          ]
          spids: [61]
        )
      spids: [56 60]
    )
    (ForEach
      iter_name: u
      iter_words: [{(002)} {(022)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (C {(test_expect_success)} {(POSIXPERM)} 
              {(DQ ("shared=1 does not clear bits preset by umask ") ($ VSub_Name "$u"))} 
              {
                (SQ <"\n"> <"\t\tmkdir sub && (\n"> <"\t\t\tcd sub &&\n"> <"\t\t\tumask $u &&\n"> 
                  <"\t\t\tgit init --shared=1 &&\n"> <"\t\t\ttest 1 = \"$(git config core.sharedrepository)\"\n"> <"\t\t) &&\n"> 
                  <"\t\tactual=$(ls -l sub/.git/HEAD) &&\n"> <"\t\tcase \"$actual\" in\n"> <"\t\t-rw-rw-r--*)\n"> <"\t\t\t: happy\n"> <"\t\t\t;;\n"> <"\t\t*)\n"> 
                  <"\t\t\techo Oops, .git/HEAD is not 0664 but $actual\n"> <"\t\t\tfalse\n"> <"\t\t\t;;\n"> <"\t\tesac\n"> <"\t">
                )
              }
            )
            (C {(rm)} {(-rf)} {(sub)})
          ]
          spids: [95 135]
        )
      spids: [90 -1]
    )
    (C {(test_expect_success)} {(SQ <"shared=all">)} 
      {
        (SQ <"\n"> <"\tmkdir sub &&\n"> <"\tcd sub &&\n"> <"\tgit init --shared=all &&\n"> 
          <"\ttest 2 = $(git config core.sharedrepository)\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"update-server-info honors core.sharedRepository">)} 
      {
        (SQ <"\n"> <"\t: > a1 &&\n"> <"\tgit add a1 &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m a1 &&\n"> <"\tumask 0277 &&\n"> <"\tgit update-server-info &&\n"> <"\tactual=\"$(ls -l .git/info/refs)\" &&\n"> 
          <"\tcase \"$actual\" in\n"> <"\t-r--r--r--*)\n"> <"\t\t: happy\n"> <"\t\t;;\n"> <"\t*)\n"> 
          <"\t\techo Oops, .git/info/refs is not 0444\n"> <"\t\tfalse\n"> <"\t\t;;\n"> <"\tesac\n">
        )
      }
    )
    (ForEach
      iter_name: u
      iter_words: [
        {(0660) (Lit_Other ":") (rw-rw----)}
        {(0640) (Lit_Other ":") (rw-r-----)}
        {(0600) (Lit_Other ":") (rw-------)}
        {(0666) (Lit_Other ":") (rw-rw-rw-)}
        {(0664) (Lit_Other ":") (rw-rw-r--)}
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:x)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(expr)} {(DQ ($ VSub_Name "$u"))} {(Lit_Other ":")} 
                                    {
                                      (DQ (".*:") (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) 
                                        ("[rw-]*") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">)
                                      )
                                    }
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [220 235]
                          )
                        }
                      spids: [219]
                    )
                  ]
                  spids: [219]
                )
                (AndOr
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:y)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(echo)} {(DQ ($ VSub_Name "$x"))})
                                          (C {(sed)} {(-e)} {(DQ (s/w/-/g))})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [241 257]
                              )
                            }
                          spids: [240]
                        )
                      ]
                      spids: [240]
                    )
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:u)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (C {(expr)} {(DQ ($ VSub_Name "$u"))} {(Lit_Other ":")} 
                                            {
                                              (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) 
                                                ("[0-7]*") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">)
                                              )
                                            }
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [263 277]
                                  )
                                }
                              spids: [262]
                            )
                          ]
                          spids: [262]
                        )
                        (AndOr
                          children: [
                            (C {(git)} {(config)} {(core.sharedrepository)} {(DQ ($ VSub_Name "$u"))})
                            (AndOr
                              children: [
                                (C {(umask)} {(0277)})
                                (C {(test_expect_success)} {(POSIXPERM)} 
                                  {
                                    (DQ ("shared = ") ($ VSub_Name "$u") (" (") ($ VSub_Name "$y") 
                                      (") ro")
                                    )
                                  } 
                                  {
                                    (SQ <"\n"> <"\n"> <"\t\trm -f .git/info/refs &&\n"> 
                                      <"\t\tgit update-server-info &&\n"> <"\t\tactual=\"$(modebits .git/info/refs)\" &&\n"> <"\t\tverbose test \"x$actual\" = \"x-$y\"\n"> 
                                      <"\n"> <"\t">
                                    )
                                  }
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
            (AndOr
              children: [
                (C {(umask)} {(077)})
                (C {(test_expect_success)} {(POSIXPERM)} 
                  {(DQ ("shared = ") ($ VSub_Name "$u") (" (") ($ VSub_Name "$x") (") rw"))} 
                  {
                    (SQ <"\n"> <"\n"> <"\t\trm -f .git/info/refs &&\n"> 
                      <"\t\tgit update-server-info &&\n"> <"\t\tactual=\"$(modebits .git/info/refs)\" &&\n"> <"\t\tverbose test \"x$actual\" = \"x-$x\"\n"> 
                      <"\n"> <"\t">
                    )
                  }
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [216 359]
        )
      spids: [187 -1]
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"info/refs respects umask in unshared repo">)} 
      {
        (SQ <"\n"> <"\trm -f .git/info/refs &&\n"> <"\ttest_unconfig core.sharedrepository &&\n"> 
          <"\tumask 002 &&\n"> <"\tgit update-server-info &&\n"> <"\techo \"-rw-rw-r--\" >expect &&\n"> 
          <"\tmodebits .git/info/refs >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"git reflog expire honors core.sharedRepository">)} 
      {
        (SQ <"\n"> <"\tumask 077 &&\n"> <"\tgit config core.sharedRepository group &&\n"> 
          <"\tgit reflog expire --all &&\n"> <"\tactual=\"$(ls -l .git/logs/refs/heads/master)\" &&\n"> <"\tcase \"$actual\" in\n"> 
          <"\t-rw-rw-*)\n"> <"\t\t: happy\n"> <"\t\t;;\n"> <"\t*)\n"> 
          <"\t\techo Ooops, .git/logs/refs/heads/master is not 0662 [$actual]\n"> <"\t\tfalse\n"> <"\t\t;;\n"> <"\tesac\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"forced modes">)} 
      {
        (SQ <"\n"> <"\tmkdir -p templates/hooks &&\n"> 
          <"\techo update-server-info >templates/hooks/post-update &&\n"> <"\tchmod +x templates/hooks/post-update &&\n"> <"\techo : >random-file &&\n"> <"\tmkdir new &&\n"> 
          <"\t(\n"> <"\t\tcd new &&\n"> <"\t\tumask 002 &&\n"> <"\t\tgit init --shared=0660 --template=../templates &&\n"> 
          <"\t\t>frotz &&\n"> <"\t\tgit add frotz &&\n"> <"\t\tgit commit -a -m initial &&\n"> <"\t\tgit repack\n"> <"\t) &&\n"> 
          <"\t# List repository files meant to be protected; note that\n"> <"\t# COMMIT_EDITMSG does not matter---0mode is not about a\n"> <"\t# repository with a work tree.\n"> 
          <"\tfind new/.git -type f -name COMMIT_EDITMSG -prune -o -print |\n"> <"\txargs ls -ld >actual &&\n"> <"\n"> <"\t# Everything must be unaccessible to others\n"> 
          <"\ttest -z \"$(sed -e \"/^.......---/d\" actual)\" &&\n"> <"\n"> <"\t# All directories must have either 2770 or 770\n"> 
          <"\ttest -z \"$(sed -n -e \"/^drwxrw[sx]---/d\" -e \"/^d/p\" actual)\" &&\n"> <"\n"> <"\t# post-update hook must be 0770\n"> <"\ttest -z \"$(sed -n -e \"/post-update/{\n"> 
          <"\t\t/^-rwxrwx---/d\n"> <"\t\tp\n"> <"\t}\" actual)\" &&\n"> <"\n"> <"\t# All files inside objects must be accessible by us\n"> 
          <"\ttest -z \"$(sed -n -e \"/objects\\//{\n"> <"\t\t/^d/d\n"> <"\t\t/^-r.-r.----/d\n"> <"\t\tp\n"> <"\t}\" actual)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"remote init does not use config from cwd">)} 
      {
        (SQ <"\n"> <"\tgit config core.sharedrepository 0666 &&\n"> <"\tumask 0022 &&\n"> 
          <"\tgit init --bare child.git &&\n"> <"\techo \"-rw-r--r--\" >expect &&\n"> <"\tmodebits child.git/config >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"re-init respects core.sharedrepository (local)">)} 
      {
        (SQ <"\n"> <"\tgit config core.sharedrepository 0666 &&\n"> <"\tumask 0022 &&\n"> 
          <"\techo whatever >templates/foo &&\n"> <"\tgit init --template=templates &&\n"> <"\techo \"-rw-rw-rw-\" >expect &&\n"> 
          <"\tmodebits .git/foo >actual &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"re-init respects core.sharedrepository (remote)">)} 
      {
        (SQ <"\n"> <"\trm -rf child.git &&\n"> <"\tumask 0022 &&\n"> 
          <"\tgit init --bare --shared=0666 child.git &&\n"> <"\ttest_path_is_missing child.git/foo &&\n"> 
          <"\tgit init --bare --template=../templates child.git &&\n"> <"\techo \"-rw-rw-rw-\" >expect &&\n"> <"\tmodebits child.git/foo >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM)} {(SQ <"template can set core.sharedrepository">)} 
      {
        (SQ <"\n"> <"\trm -rf child.git &&\n"> <"\tumask 0022 &&\n"> 
          <"\tgit config core.sharedrepository 0666 &&\n"> <"\tcp .git/config templates/config &&\n"> 
          <"\tgit init --bare --template=../templates child.git &&\n"> <"\techo \"-rw-rw-rw-\" >expect &&\n"> <"\tmodebits child.git/HEAD >actual &&\n"> 
          <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_done)})
  ]
)