(CommandList
  children: [
    (C {(set)} {(-eu)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SCRIPT_DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [
                          (C {(cd)} 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(dirname)} 
                                          {
                                            (DQ 
                                              (BracedVarSub
                                                token: <VSub_Name BASH_SOURCE>
                                                bracket_op: 
                                                  (ArrayIndex
                                                    expr: (ArithWord w:{(Lit_Digits 0)})
                                                  )
                                                spids: [61 66]
                                              )
                                            )
                                          }
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [57 68]
                                )
                              )
                            }
                          )
                          (C {(pwd)})
                        ]
                        op_id: Op_DAmp
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [53 74]
              )
            }
          spids: [52]
        )
      ]
      spids: [52]
    )
    (AndOr
      children: [
        (C {(source)} {(${ VSub_Name SCRIPT_DIR) (/testenv.sh)})
        (BraceGroup
          children: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(echo)} {(DQ ("testenv.sh not found!"))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[93])]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">)
          ]
          spids: [85]
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (C {(source)} {(${ VSub_Name SCRIPT_DIR) (/common.sh)})
        (BraceGroup
          children: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(echo)} {(DQ ("common.sh not found!"))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[122])]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">)
          ]
          spids: [114]
        )
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:RELEASE_SCRIPT)
          op: Equal
          rhs: {(${ VSub_Name SCRIPT_DIR) (/release.sh)}
          spids: [134]
        )
      ]
      spids: [134]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GERRIT_ROOT)
          op: Equal
          rhs: {(${ VSub_Name TEST_TMPDIR) (/git/gerrit)}
          spids: [141]
        )
      ]
      spids: [141]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GITHUB_ROOT)
          op: Equal
          rhs: {(${ VSub_Name TEST_TMPDIR) (/git/github)}
          spids: [147]
        )
      ]
      spids: [147]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:WORKSPACE)
          op: Equal
          rhs: {(${ VSub_Name TEST_TMPDIR) (/git/workspace)}
          spids: [153]
        )
      ]
      spids: [153]
    )
    (C {(export)} {(Lit_VarLike "RELEASE_REPOSITORIES=") (DQ (${ VSub_Name GITHUB_ROOT))})
    (C {(export)} 
      {(Lit_VarLike "MASTER_REPOSITORIES=") 
        (DQ (${ VSub_Name GITHUB_ROOT) (" ") (${ VSub_Name GERRIT_ROOT))
      }
    )
    (C {(setup_git_repository)})
    (FuncDef
      name: set_up
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-fr)} {(${ VSub_Name GERRIT_ROOT)} {(${ VSub_Name GITHUB_ROOT)} 
              {(${ VSub_Name WORKSPACE)}
            )
            (C {(git)} {(clone)} {(-l)} {(--bare)} {(-q)} {(${ VSub_Name MASTER_ROOT)} 
              {(${ VSub_Name GERRIT_ROOT)}
            )
            (C {(git)} {(clone)} {(-l)} {(--bare)} {(-q)} {(${ VSub_Name MASTER_ROOT)} 
              {(${ VSub_Name GITHUB_ROOT)}
            )
            (C {(git)} {(clone)} {(-l)} {(-q)} {(${ VSub_Name GERRIT_ROOT)} {(${ VSub_Name WORKSPACE)})
            (C {(cd)} {(${ VSub_Name WORKSPACE)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_DGreat fd:-1 arg_word:{(.git/config)} spids:[291])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("[user]\n") ("    name = Bazel tests\n") 
                        ("    email = noreply@google.com\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [294]
                )
              ]
            )
          ]
          spids: [191]
        )
      spids: [185 190]
    )
    (FuncDef
      name: create
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:old_branch)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(git_get_branch)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [315 317]
                      )
                    }
                  spids: [314]
                )
              ]
              spids: [312]
            )
            (Sentence
              child: (C {(${ VSub_Name RELEASE_SCRIPT)} {(create)} {($ VSub_At "$@")})
              terminator: <Op_Amp "&">
            )
            (AndOr
              children: [
                (SimpleCommand
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [329]
                    )
                  ]
                )
                (C {(fail)} 
                  {
                    (DQ ("Failed to cut release ") ($ VSub_Number "$1") (" at commit ") 
                      ($ VSub_Number "$2")
                    )
                  }
                )
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:new_branch)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(git_get_branch)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [350 352]
                      )
                    }
                  spids: [349]
                )
              ]
              spids: [347]
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$old_branch"))} {(DQ ($ VSub_Name "$new_branch"))})
            (C {(assert_contains)} 
              {
                (DQ ("Created ") ($ VSub_Number "$1") (".* on branch release-") ($ VSub_Number "$1") (.))
              } {($ VSub_Name "$TEST_log")}
            )
            (SimpleCommand
              words: [
                {(git)}
                {(show)}
                {(-s)}
                {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)}
                {(DQ (release-) ($ VSub_Number "$1"))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [397]
                )
              ]
            )
          ]
          spids: [309]
        )
      spids: [303 308]
    )
    (FuncDef
      name: push
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:branch)
                  op: Equal
                  rhs: {(DQ (release-) ($ VSub_Number "$1"))}
                  spids: [414]
                )
              ]
              spids: [412]
            )
            (C {(git)} {(checkout)} {(DQ ($ VSub_Name "$branch"))})
            (AndOr
              children: [
                (C {(${ VSub_Name RELEASE_SCRIPT)} {(push)})
                (C {(fail)} {(DQ ("Failed to push release branch ") ($ VSub_Name "$branch"))})
              ]
              op_id: Op_DPipe
            )
            (SimpleCommand
              words: [{(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(branch)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [456]
                )
              ]
            )
            (C {(expect_log)} {(DQ ($ VSub_Name "$branch"))})
            (SimpleCommand
              words: [{(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GERRIT_ROOT)} {(branch)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [477]
                )
              ]
            )
            (C {(expect_not_log)} {(DQ ($ VSub_Name "$branch"))})
            (C {(assert_equals)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(show)} {(-s)} 
                            {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {($ VSub_Name "$branch")}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [491 506]
                  )
                )
              } 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(show)} 
                            {(-s)} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {($ VSub_Name "$branch")}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [512 533]
                  )
                )
              }
            )
          ]
          spids: [409]
        )
      spids: [403 408]
    )
    (FuncDef
      name: release
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tag)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [550]
                )
              ]
              spids: [548]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:branch)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(git_get_branch)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [557 559]
                      )
                    }
                  spids: [556]
                )
              ]
              spids: [554]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:changelog)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(cat)} {(CHANGELOG.md)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [565 569]
                      )
                    }
                  spids: [564]
                )
              ]
              spids: [562]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:commit)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(git)} {(show)} {(-s)} 
                                {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {($ VSub_Name "$branch")}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [575 590]
                      )
                    }
                  spids: [574]
                )
              ]
              spids: [572]
            )
            (AndOr
              children: [
                (Pipeline
                  children: [(C {(echo)} {(y)}) (C {(${ VSub_Name RELEASE_SCRIPT)} {(release)})]
                  negated: False
                )
                (C {(fail)} {(DQ ("Failed to release ") (${ VSub_Name branch))})
              ]
              op_id: Op_DPipe
            )
            (C {(assert_equals)} {(master)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(git_get_branch)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [622 624]
                  )
                )
              }
            )
            (SimpleCommand
              words: [{(git)} {(tag)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [632]
                )
              ]
            )
            (C {(expect_log)} {($ VSub_Name "$tag")})
            (SimpleCommand
              words: [{(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(tag)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [651]
                )
              ]
            )
            (C {(expect_log)} {($ VSub_Name "$tag")})
            (SimpleCommand
              words: [{(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GERRIT_ROOT)} {(tag)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [670]
                )
              ]
            )
            (C {(expect_not_log)} {($ VSub_Name "$tag")})
            (C {(assert_equals)} {(DQ ($ VSub_Name "$commit"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(show)} {(-s)} 
                            {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {($ VSub_Name "$tag")}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [690 705]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$commit"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(show)} {(-s)} 
                            {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {(master)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [716 731]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$commit"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(show)} 
                            {(-s)} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {($ VSub_Name "$tag")}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [744 765]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$commit"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(show)} 
                            {(-s)} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {(master)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [778 799]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$commit"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GERRIT_ROOT)} {(show)} 
                            {(-s)} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B)} {(master)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [812 833]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(show)} {($ VSub_Name "$tag") (Lit_Other ":") (CHANGELOG.md)})
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [849 857]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(git)} {(show)} {(master) (Lit_Other ":") (CHANGELOG.md)})]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [868 876]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(show)} 
                            {($ VSub_Name "$tag") (Lit_Other ":") (CHANGELOG.md)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [889 903]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(show)} 
                            {(master) (Lit_Other ":") (CHANGELOG.md)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [916 930]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GERRIT_ROOT)} {(show)} 
                            {(master) (Lit_Other ":") (CHANGELOG.md)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [943 957]
                  )
                )
              }
            )
          ]
          spids: [545]
        )
      spids: [539 544]
    )
    (FuncDef
      name: abandon
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tag)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [975]
                )
              ]
              spids: [973]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:branch)
                  op: Equal
                  rhs: {(DQ (release-) ($ VSub_Name "$tag"))}
                  spids: [983]
                )
              ]
              spids: [981]
            )
            (C {(git)} {(checkout)} {(DQ ($ VSub_Name "$branch"))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:changelog)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(git)} {(show)} {(master) (Lit_Other ":") (CHANGELOG.md)})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1003 1011]
                        )
                      )
                    }
                  spids: [1001]
                )
              ]
              spids: [999]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:master_sha1)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(master)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [1018 1024]
                      )
                    }
                  spids: [1017]
                )
              ]
              spids: [1015]
            )
            (AndOr
              children: [
                (Pipeline
                  children: [(C {(echo)} {(y)}) (C {(${ VSub_Name RELEASE_SCRIPT)} {(abandon)})]
                  negated: False
                )
                (C {(fail)} {(DQ ("Failed to abandon release ") (${ VSub_Name branch))})
              ]
              op_id: Op_DPipe
            )
            (C {(assert_equals)} {(master)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(git_get_branch)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [1056 1058]
                  )
                )
              }
            )
            (SimpleCommand
              words: [{(git)} {(tag)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [1071]
                )
              ]
            )
            (C {(expect_not_log)} {($ VSub_Name "$tag")})
            (SimpleCommand
              words: [{(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(tag)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [1090]
                )
              ]
            )
            (C {(expect_not_log)} {($ VSub_Name "$tag")})
            (SimpleCommand
              words: [{(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GERRIT_ROOT)} {(tag)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [1109]
                )
              ]
            )
            (C {(expect_not_log)} {($ VSub_Name "$tag")})
            (SimpleCommand
              words: [{(git)} {(branch)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [1127]
                )
              ]
            )
            (C {(expect_not_log)} {($ VSub_Name "$branch")})
            (SimpleCommand
              words: [{(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(branch)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_log")}
                  spids: [1146]
                )
              ]
            )
            (C {(expect_not_log)} {($ VSub_Name "$branch")})
            (C {(assert_equals)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(master)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [1163 1169]
                  )
                )
              } {(DQ (${ VSub_Name master_sha1))}
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(git)} {(show)} {(master) (Lit_Other ":") (CHANGELOG.md)})]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [1191 1199]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GITHUB_ROOT)} {(show)} 
                            {(master) (Lit_Other ":") (CHANGELOG.md)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [1212 1226]
                  )
                )
              }
            )
            (C {(assert_equals)} {(DQ ($ VSub_Name "$changelog"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(git)} {(--git-dir) (Lit_Other "=") (${ VSub_Name GERRIT_ROOT)} {(show)} 
                            {(master) (Lit_Other ":") (CHANGELOG.md)}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [1239 1253]
                  )
                )
              }
            )
          ]
          spids: [970]
        )
      spids: [964 969]
    )
    (FuncDef
      name: test_release_workflow
      body: 
        (BraceGroup
          children: [
            (C {(export)} {(Lit_VarLike "EDITOR=") (true)})
            (C {(create)} {(v0)} {(965c392)})
            (C {(expect_log)} {(DQ ("Release v0"))})
            (C {(expect_log)} {(DQ ("Initial release"))})
            (C {(push)} {(v0)})
            (C {(release)} {(v0)})
            (C {(export)} {(Lit_VarLike "EDITOR=") (${ VSub_Name TEST_TMPDIR) (/editor.sh)})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RELNOTES)
                  op: Equal
                  rhs: 
                    {
                      (SQ <"Incompatible changes:\n"> <"\n"> 
                        <"  - Remove deprecated \"make var\" INCDIR\n"> <"\n"> <"Important changes:\n"> <"\n"> 
                        <"  - Use a default implementation of a progress message, rather than\n"> <"    defaulting to null for all SpawnActions.">
                      )
                    }
                  spids: [1339]
                )
              ]
              spids: [1337]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(${ VSub_Name TEST_TMPDIR) (/expected.log)}
                  spids: [1355]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("# Editing release notes\n") 
                        ("# Modify the release notes to make them suitable for the release.\n") ("# Every line starting with a # will be removed as well as every\n") 
                        ("# empty line at the start and at the end.\n") ("\n") ("# Release v1 (") 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(date)} 
                                  {(Lit_Other "+") (Lit_Other "%") (Y-) (Lit_Other "%") (m-) 
                                    (Lit_Other "%") (d)
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1370 1380]
                        ) (")\n") ("\n") (${ VSub_Name RELNOTES) ("\n") ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1361]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ("Test replacement"))}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(${ VSub_Name TEST_TMPDIR) (/replacement.log)}
                  spids: [1396]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(${ VSub_Name EDITOR)}
                  spids: [1406]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("#!/bin/bash\n") ("\n") ("# 1. Assert the file is correct\n") ("if [ ") 
                        (Right_DoubleQuote "\"") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("(cat ") 
                        (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("1)") (Right_DoubleQuote "\"") (" != ") (Right_DoubleQuote "\"") 
                        (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("(cat ") (${ VSub_Name TEST_TMPDIR) ("/expected.log)") (Right_DoubleQuote "\"") (" ]; then\n") 
                        ("  echo ") (Right_DoubleQuote "\"") ("Expected:") (Right_DoubleQuote "\"") (" >&2\n") ("  cat ") 
                        (${ VSub_Name TEST_TMPDIR) ("/expected.log >&2\n") ("  echo ") (Right_DoubleQuote "\"") ("Got:") (Right_DoubleQuote "\"") (" >&2\n") 
                        ("  cat ") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("1 >&2\n") ("  exit 1\n") ("fi\n") ("\n") 
                        ("# 2. write the replacement in the input file\n") ("cat ") (${ VSub_Name TEST_TMPDIR) ("/replacement.log >") 
                        (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("1\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1411]
                )
              ]
            )
            (C {(chmod)} {(Lit_Other "+") (x)} {(${ VSub_Name EDITOR)})
            (C {(create)} {(v1)} {(1170dc6)} {(0540fde)})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:header)
                  op: Equal
                  rhs: 
                    {(SQ <"Release v1 (">) 
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(date)} 
                                {(Lit_Other "+") (Lit_Other "%") (Y-) (Lit_Other "%") (m-) 
                                  (Lit_Other "%") (d)
                                }
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1489 1499]
                      ) 
                      (SQ <")\n"> <"\n"> <"Baseline: 1170dc6\n"> <"\n"> <"Cherry picks:\n"> 
                        <
"   + 0540fde: Extract version numbers that look like \"..._1.2.3_...\"\n"
                        > <"              from BUILD_EMBED_LABEL into Info.plist.\n"> <"\n">
                      )
                    }
                  spids: [1485]
                )
              ]
              spids: [1483]
            )
            (C {(assert_equals)} {(DQ (${ VSub_Name header) ("Test replacement"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(cat)} {(${ VSub_Name TEST_log)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [1522 1528]
                  )
                )
              }
            )
            (C {(push)} {(v1)})
            (SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ("#!") 
                    (CommandSubPart
                      command_list: (CommandList children:[(C {(which)} {(true)})])
                      left_token: <Left_CommandSub "$(">
                      spids: [1546 1550]
                    )
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(${ VSub_Name EDITOR)}
                  spids: [1553]
                )
              ]
            )
            (C {(create)} {(v1)} {(1170dc6)} {(0540fde)} {(cef25c4)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:header)
                  op: Equal
                  rhs: 
                    {(SQ <"Release v1 (">) 
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(date)} 
                                {(Lit_Other "+") (Lit_Other "%") (Y-) (Lit_Other "%") (m-) 
                                  (Lit_Other "%") (d)
                                }
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1574 1584]
                      ) 
                      (SQ <")\n"> <"\n"> <"Baseline: 1170dc6\n"> <"\n"> <"Cherry picks:\n"> 
                        <
"   + 0540fde: Extract version numbers that look like \"..._1.2.3_...\"\n"
                        > <"              from BUILD_EMBED_LABEL into Info.plist.\n"> 
                        <"   + cef25c4: RELNOTES: Attribute error messages related to Android\n"> <"              resources are easier to understand now.\n"> <"\n">
                      )
                    }
                  spids: [1570]
                )
              ]
              spids: [1570]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RELNOTES)
                  op: Equal
                  rhs: 
                    {(DQ (${ VSub_Name RELNOTES)) 
                      (SQ <"\n"> 
                        <"  - Attribute error messages related to Android resources are easier\n"> <"    to understand now.">
                      )
                    }
                  spids: [1599]
                )
              ]
              spids: [1599]
            )
            (C {(assert_equals)} {(DQ (${ VSub_Name header) (${ VSub_Name RELNOTES))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(cat)} {(${ VSub_Name TEST_log)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [1624 1630]
                  )
                )
              }
            )
            (C {(assert_equals)} {(2)} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(get_release_candidate)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [1639 1641]
                  )
                )
              }
            )
            (C {(push)} {(v1)})
            (C {(release)} {(v1)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(${ VSub_Name EDITOR)}
                  spids: [1667]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("#!/bin/bash\n") 
                        ("# Make sure we have release notes or the release will be cancelled.\n") ("echo 'Dummy release' >") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("1\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1672]
                )
              ]
            )
            (C {(create)} {(v2)} {(2464526)})
            (C {(expect_log)} {(DQ ("Release v2"))})
            (C {(expect_log)} {(DQ ("Baseline: 2464526"))})
            (C {(abandon)} {(v2)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: {("echo HOOK-SHOULD-BE-IGNORED >>$1\n")}
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [1721]
                )
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(.git/hooks/commit-msg)}
                  spids: [1726]
                )
              ]
            )
            (C {(chmod)} {(Lit_Other "+") (x)} {(.git/hooks/commit-msg)})
            (C {(create)} {(v2)} {(2464526)})
            (C {(expect_log)} {(DQ ("Release v2"))})
            (C {(expect_log)} {(DQ ("Baseline: 2464526"))})
            (C {(expect_not_log)} {(DQ (HOOK-SHOULD-BE-IGNORED))})
            (C {(push)} {(v2)})
            (C {(abandon)} {(v2)})
          ]
          spids: [1266]
        )
      spids: [1260 1265]
    )
    (C {(run_suite)} {(DQ ("Release tests"))})
  ]
)