(CommandList
  children: [
    (If
      arms: [
        (if_arm
          cond: [(C {(test)} {($ VSub_Pound "$#")} {(-eq)} {(0)})]
          action: [(C {(set)} {(--)} {(-h)})]
          spids: [-1 28]
        )
      ]
      spids: [-1 37]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OPTS_SPEC)
          op: Equal
          rhs: 
            {
              (DQ ("git subtree add   --prefix=<prefix> <commit>\n") 
                ("git subtree add   --prefix=<prefix> <repository> <ref>\n") ("git subtree merge --prefix=<prefix> <commit>\n") 
                ("git subtree pull  --prefix=<prefix> <repository> <ref>\n") ("git subtree push  --prefix=<prefix> <repository> <ref>\n") 
                ("git subtree split --prefix=<prefix> <commit...>\n") ("--\n") ("h,help        show the help\n") ("q             quiet\n") 
                ("d             show debug messages\n") ("P,prefix=     the name of the subdir to split out\n") 
                (
"m,message=    use the given message as the commit message for the merge commit\n"
                ) (" options for 'split'\n") ("annotate=     add a prefix to commit message of new commits\n") 
                ("b,branch=     create a new branch from the split subtree\n") ("ignore-joins  ignore prior --rejoin commits\n") 
                ("onto=         try connecting new tree to an existing one\n") ("rejoin        merge the new branch back into HEAD\n") (" options for 'add', 'merge', and 'pull'\n") 
                ("squash        merge subtree changes as a single commit\n")
              )
            }
          spids: [39]
        )
      ]
      spids: [39]
    )
    (C {(eval)} 
      {
        (DQ 
          (CommandSubPart
            command_list: 
              (CommandList
                children: [
                  (AndOr
                    children: [
                      (Pipeline
                        children: [
                          (C {(echo)} {(DQ ($ VSub_Name "$OPTS_SPEC"))})
                          (C {(git)} {(rev-parse)} {(--parseopt)} {(--)} {(DQ ($ VSub_At "$@"))})
                        ]
                        negated: False
                      )
                      (C {(echo)} {(exit)} {($ VSub_QMark "$?")})
                    ]
                    op_id: Op_DPipe
                  )
                ]
              )
            left_token: <Left_CommandSub "$(">
            spids: [67 95]
          )
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PATH)
          op: Equal
          rhs: 
            {($ VSub_Name "$PATH") (Lit_Other ":") 
              (CommandSubPart
                command_list: (CommandList children:[(C {(git)} {(--exec-path)})])
                left_token: <Left_CommandSub "$(">
                spids: [102 106]
              )
            }
          spids: [99]
        )
      ]
      spids: [99]
    )
    (C {(.)} {(git-sh-setup)})
    (C {(require_work_tree)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:quiet) op:Equal rhs:{(SQ )} spids:[116])]
      spids: [116]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:branch) op:Equal rhs:{(SQ )} spids:[118])]
      spids: [118]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:debug) op:Equal rhs:{(SQ )} spids:[120])]
      spids: [120]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:command) op:Equal rhs:{(SQ )} spids:[122])]
      spids: [122]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:onto) op:Equal rhs:{(SQ )} spids:[124])]
      spids: [124]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:rejoin) op:Equal rhs:{(SQ )} spids:[126])]
      spids: [126]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ignore_joins) op:Equal rhs:{(SQ )} spids:[128])]
      spids: [128]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:annotate) op:Equal rhs:{(SQ )} spids:[130])]
      spids: [130]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:squash) op:Equal rhs:{(SQ )} spids:[132])]
      spids: [132]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:message) op:Equal rhs:{(SQ )} spids:[134])]
      spids: [134]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:prefix) op:Equal rhs:{(SQ )} spids:[136])]
      spids: [136]
    )
    (FuncDef
      name: debug
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$debug"))})]
                  action: [
                    (SimpleCommand
                      words: [
                        {(printf)}
                        {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                        {(DQ ($ VSub_Star "$*"))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[172])]
                    )
                  ]
                  spids: [-1 158]
                )
              ]
              spids: [-1 176]
            )
          ]
          spids: [144]
        )
      spids: [139 143]
    )
    (FuncDef
      name: say
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$quiet"))})]
                  action: [
                    (SimpleCommand
                      words: [
                        {(printf)}
                        {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                        {(DQ ($ VSub_Star "$*"))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[214])]
                    )
                  ]
                  spids: [-1 200]
                )
              ]
              spids: [-1 218]
            )
          ]
          spids: [186]
        )
      spids: [181 185]
    )
    (FuncDef
      name: progress
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$quiet"))})]
                  action: [
                    (SimpleCommand
                      words: [
                        {(printf)}
                        {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\r">))}
                        {(DQ ($ VSub_Star "$*"))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[256])]
                    )
                  ]
                  spids: [-1 242]
                )
              ]
              spids: [-1 260]
            )
          ]
          spids: [228]
        )
      spids: [223 227]
    )
    (FuncDef
      name: assert
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(Pipeline children:[(C {(DQ ($ VSub_At "$@"))})] negated:True)]
                  action: [(C {(die)} {(DQ ("assertion failed: "))} {(DQ ($ VSub_At "$@"))})]
                  spids: [-1 282]
                )
              ]
              spids: [-1 296]
            )
          ]
          spids: [270]
        )
      spids: [265 269]
    )
    (While
      cond: [(C {(test)} {($ VSub_Pound "$#")} {(-gt)} {(0)})]
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:opt)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [315]
                )
              ]
              spids: [315]
            )
            (C {(shift)})
            (Case
              to_match: {(DQ ($ VSub_Name "$opt"))}
              arms: [
                (case_arm
                  pat_list: [{(-q)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:quiet) op:Equal rhs:{(1)} spids:[338])]
                      spids: [338]
                    )
                  ]
                  spids: [334 335 342 -1]
                )
                (case_arm
                  pat_list: [{(-d)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:debug) op:Equal rhs:{(1)} spids:[349])]
                      spids: [349]
                    )
                  ]
                  spids: [345 346 353 -1]
                )
                (case_arm
                  pat_list: [{(--annotate)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:annotate)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number "$1"))}
                          spids: [360]
                        )
                      ]
                      spids: [360]
                    )
                    (C {(shift)})
                  ]
                  spids: [356 357 369 -1]
                )
                (case_arm
                  pat_list: [{(--no-annotate)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:annotate)
                          op: Equal
                          rhs: {(SQ )}
                          spids: [376]
                        )
                      ]
                      spids: [376]
                    )
                  ]
                  spids: [372 373 379 -1]
                )
                (case_arm
                  pat_list: [{(-b)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:branch)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number "$1"))}
                          spids: [386]
                        )
                      ]
                      spids: [386]
                    )
                    (C {(shift)})
                  ]
                  spids: [382 383 395 -1]
                )
                (case_arm
                  pat_list: [{(-P)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prefix)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Number 1>
                                  suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /)})
                                  spids: [404 408]
                                )
                              )
                            }
                          spids: [402]
                        )
                      ]
                      spids: [402]
                    )
                    (C {(shift)})
                  ]
                  spids: [398 399 415 -1]
                )
                (case_arm
                  pat_list: [{(-m)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:message)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number "$1"))}
                          spids: [422]
                        )
                      ]
                      spids: [422]
                    )
                    (C {(shift)})
                  ]
                  spids: [418 419 431 -1]
                )
                (case_arm
                  pat_list: [{(--no-prefix)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prefix)
                          op: Equal
                          rhs: {(SQ )}
                          spids: [438]
                        )
                      ]
                      spids: [438]
                    )
                  ]
                  spids: [434 435 441 -1]
                )
                (case_arm
                  pat_list: [{(--onto)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:onto)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number "$1"))}
                          spids: [448]
                        )
                      ]
                      spids: [448]
                    )
                    (C {(shift)})
                  ]
                  spids: [444 445 457 -1]
                )
                (case_arm
                  pat_list: [{(--no-onto)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:onto) op:Equal rhs:{(SQ )} spids:[464])]
                      spids: [464]
                    )
                  ]
                  spids: [460 461 467 -1]
                )
                (case_arm
                  pat_list: [{(--rejoin)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:rejoin) op:Equal rhs:{(1)} spids:[474])]
                      spids: [474]
                    )
                  ]
                  spids: [470 471 478 -1]
                )
                (case_arm
                  pat_list: [{(--no-rejoin)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:rejoin)
                          op: Equal
                          rhs: {(SQ )}
                          spids: [485]
                        )
                      ]
                      spids: [485]
                    )
                  ]
                  spids: [481 482 488 -1]
                )
                (case_arm
                  pat_list: [{(--ignore-joins)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ignore_joins)
                          op: Equal
                          rhs: {(1)}
                          spids: [495]
                        )
                      ]
                      spids: [495]
                    )
                  ]
                  spids: [491 492 499 -1]
                )
                (case_arm
                  pat_list: [{(--no-ignore-joins)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ignore_joins)
                          op: Equal
                          rhs: {(SQ )}
                          spids: [506]
                        )
                      ]
                      spids: [506]
                    )
                  ]
                  spids: [502 503 509 -1]
                )
                (case_arm
                  pat_list: [{(--squash)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:squash) op:Equal rhs:{(1)} spids:[516])]
                      spids: [516]
                    )
                  ]
                  spids: [512 513 520 -1]
                )
                (case_arm
                  pat_list: [{(--no-squash)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:squash)
                          op: Equal
                          rhs: {(SQ )}
                          spids: [527]
                        )
                      ]
                      spids: [527]
                    )
                  ]
                  spids: [523 524 530 -1]
                )
                (case_arm
                  pat_list: [{(--)}]
                  action: [(ControlFlow token:<ControlFlow_Break break>)]
                  spids: [533 534 540 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [(C {(die)} {(DQ ("Unexpected option: ") ($ VSub_Name "$opt"))})]
                  spids: [543 544 555 -1]
                )
              ]
              spids: [325 331 558]
            )
          ]
          spids: [312 560]
        )
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:command)
          op: Equal
          rhs: {(DQ ($ VSub_Number "$1"))}
          spids: [563]
        )
      ]
      spids: [563]
    )
    (C {(shift)})
    (Case
      to_match: {(DQ ($ VSub_Name "$command"))}
      arms: [
        (case_arm
          pat_list: [{(add)} {(merge)} {(pull)}]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:default) op:Equal rhs:{(SQ )} spids:[587])]
              spids: [587]
            )
          ]
          spids: [579 584 590 -1]
        )
        (case_arm
          pat_list: [{(split)} {(push)}]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:default)
                  op: Equal
                  rhs: {(DQ ("--default HEAD"))}
                  spids: [598]
                )
              ]
              spids: [598]
            )
          ]
          spids: [592 595 604 -1]
        )
        (case_arm
          pat_list: [{(Lit_Other "*")}]
          action: [(C {(die)} {(DQ ("Unknown command '") ($ VSub_Name "$command") ("'"))})]
          spids: [606 607 619 -1]
        )
      ]
      spids: [571 577 621]
    )
    (If
      arms: [
        (if_arm
          cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$prefix"))})]
          action: [(C {(die)} {(DQ ("You must provide the --prefix option."))})]
          spids: [-1 634]
        )
      ]
      spids: [-1 643]
    )
    (Case
      to_match: {(DQ ($ VSub_Name "$command"))}
      arms: [
        (case_arm
          pat_list: [{(add)}]
          action: [
            (AndOr
              children: [
                (C {(test)} {(-e)} {(DQ ($ VSub_Name "$prefix"))})
                (C {(die)} {(DQ ("prefix '") ($ VSub_Name "$prefix") ("' already exists."))})
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [654 655 678 -1]
        )
        (case_arm
          pat_list: [{(Lit_Other "*")}]
          action: [
            (AndOr
              children: [
                (C {(test)} {(-e)} {(DQ ($ VSub_Name "$prefix"))})
                (C {(die)} 
                  {(DQ ("'") ($ VSub_Name "$prefix") ("' does not exist; use 'git subtree add'"))}
                )
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [680 681 704 -1]
        )
      ]
      spids: [646 652 706]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:dir)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(dirname)} {(DQ ($ VSub_Name "$prefix") (/.))})]
                    )
                  left_token: <Left_CommandSub "$(">
                  spids: [711 718]
                )
              )
            }
          spids: [709]
        )
      ]
      spids: [709]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (AndOr
              children: [
                (C {(test)} {(DQ ($ VSub_Name "$command"))} {(KW_Bang "!") (Lit_Other "=")} {(DQ (pull))})
                (AndOr
                  children: [
                    (C {(test)} {(DQ ($ VSub_Name "$command"))} {(KW_Bang "!") (Lit_Other "=")} 
                      {(DQ (add))}
                    )
                    (C {(test)} {(DQ ($ VSub_Name "$command"))} {(KW_Bang "!") (Lit_Other "=")} 
                      {(DQ (push))}
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          action: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:revs)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(git)} {(rev-parse)} {($ VSub_Name "$default")} {(--revs-only)} 
                                    {(DQ ($ VSub_At "$@"))}
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [773 785]
                          )
                        }
                      spids: [772]
                    )
                  ]
                  spids: [772]
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:dirs)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(git)} {(rev-parse)} {(--no-revs)} {(--no-flags)} 
                                    {(DQ ($ VSub_At "$@"))}
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [795 807]
                          )
                        }
                      spids: [794]
                    )
                  ]
                  spids: [794]
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$dirs"))})]
                  action: [(C {(die)} {(DQ ("Error: Use --prefix instead of bare filenames."))})]
                  spids: [-1 827]
                )
              ]
              spids: [-1 837]
            )
          ]
          spids: [-1 769]
        )
      ]
      spids: [-1 839]
    )
    (C {(debug)} {(DQ ("command: {") ($ VSub_Name "$command") ("}"))})
    (C {(debug)} {(DQ ("quiet: {") ($ VSub_Name "$quiet") ("}"))})
    (C {(debug)} {(DQ ("revs: {") ($ VSub_Name "$revs") ("}"))})
    (C {(debug)} {(DQ ("dir: {") ($ VSub_Name "$dir") ("}"))})
    (C {(debug)} {(DQ ("opts: {") ($ VSub_Star "$*") ("}"))})
    (C {(debug)})
    (FuncDef
      name: cache_setup
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cachedir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name "$GIT_DIR") (/subtree-cache/) ($ VSub_Dollar "$$"))}
                  spids: [893]
                )
              ]
              spids: [893]
            )
            (AndOr
              children: [
                (C {(rm)} {(-rf)} {(DQ ($ VSub_Name "$cachedir"))})
                (C {(die)} {(DQ ("Can't delete old cachedir: ") ($ VSub_Name "$cachedir"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$cachedir"))})
                (C {(die)} {(DQ ("Can't create new cachedir: ") ($ VSub_Name "$cachedir"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$cachedir") (/notree))})
                (C {(die)} {(DQ ("Can't create new cachedir: ") ($ VSub_Name "$cachedir") (/notree))})
              ]
              op_id: Op_DPipe
            )
            (SimpleCommand
              words: [{(debug)} {(DQ ("Using cachedir: ") ($ VSub_Name "$cachedir"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[967])]
            )
          ]
          spids: [890]
        )
      spids: [885 889]
    )
    (FuncDef
      name: cache_get
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: oldrev
              iter_words: [{(DQ ($ VSub_At "$@"))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(test)} {(-r)} 
                              {(DQ ($ VSub_Name "$cachedir") (/) ($ VSub_Name "$oldrev"))}
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [{(read)} {(newrev)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Less
                                  fd: -1
                                  arg_word: 
                                    {(DQ ($ VSub_Name "$cachedir") (/) ($ VSub_Name "$oldrev"))}
                                  spids: [1015]
                                )
                              ]
                            )
                            (C {(echo)} {($ VSub_Name "$newrev")})
                          ]
                          spids: [-1 1008]
                        )
                      ]
                      spids: [-1 1028]
                    )
                  ]
                  spids: [992 1031]
                )
              spids: [986 -1]
            )
          ]
          spids: [978]
        )
      spids: [973 977]
    )
    (FuncDef
      name: cache_miss
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: oldrev
              iter_words: [{(DQ ($ VSub_At "$@"))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Pipeline
                              children: [
                                (C {(test)} {(-r)} 
                                  {(DQ ($ VSub_Name "$cachedir") (/) ($ VSub_Name "$oldrev"))}
                                )
                              ]
                              negated: True
                            )
                          ]
                          action: [(C {(echo)} {($ VSub_Name "$oldrev")})]
                          spids: [-1 1073]
                        )
                      ]
                      spids: [-1 1081]
                    )
                  ]
                  spids: [1055 1084]
                )
              spids: [1049 -1]
            )
          ]
          spids: [1041]
        )
      spids: [1036 1040]
    )
    (FuncDef
      name: check_parents
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:missed)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(cache_miss)} {(DQ ($ VSub_At "$@"))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1098 1104]
                      )
                    }
                  spids: [1097]
                )
              ]
              spids: [1097]
            )
            (ForEach
              iter_name: miss
              iter_words: [{($ VSub_Name "$missed")}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Pipeline
                              children: [
                                (C {(test)} {(-r)} 
                                  {(DQ ($ VSub_Name "$cachedir") (/notree/) ($ VSub_Name "$miss"))}
                                )
                              ]
                              negated: True
                            )
                          ]
                          action: [(C {(debug)} {(DQ ("  incorrect order: ") ($ VSub_Name "$miss"))})]
                          spids: [-1 1134]
                        )
                      ]
                      spids: [-1 1145]
                    )
                  ]
                  spids: [1116 1148]
                )
              spids: [1112 -1]
            )
          ]
          spids: [1094]
        )
      spids: [1089 1093]
    )
    (FuncDef
      name: set_notree
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ (1))}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name "$cachedir") (/notree/) ($ VSub_Number "$1"))}
                  spids: [1167]
                )
              ]
            )
          ]
          spids: [1158]
        )
      spids: [1153 1157]
    )
    (FuncDef
      name: cache_set
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:oldrev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [1186]
                )
              ]
              spids: [1186]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newrev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [1192]
                )
              ]
              spids: [1192]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(test)} {(DQ ($ VSub_Name "$oldrev"))} {(KW_Bang "!") (Lit_Other "=")} 
                          {(DQ (latest_old))}
                        )
                        (AndOr
                          children: [
                            (C {(test)} {(DQ ($ VSub_Name "$oldrev"))} {(KW_Bang "!") (Lit_Other "=")} 
                              {(DQ (latest_new))}
                            )
                            (C {(test)} {(-e)} 
                              {(DQ ($ VSub_Name "$cachedir") (/) ($ VSub_Name "$oldrev"))}
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (C {(die)} {(DQ ("cache for ") ($ VSub_Name "$oldrev") (" already exists!"))})
                  ]
                  spids: [-1 1243]
                )
              ]
              spids: [-1 1255]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_Name "$newrev"))}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name "$cachedir") (/) ($ VSub_Name "$oldrev"))}
                  spids: [1264]
                )
              ]
            )
          ]
          spids: [1183]
        )
      spids: [1178 1182]
    )
    (FuncDef
      name: rev_exists
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (SimpleCommand
                      words: [{(git)} {(rev-parse)} {(DQ ($ VSub_Number "$1"))}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(/dev/null)}
                          spids: [1292]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 2
                          arg_word: {(1)}
                          spids: [1295]
                        )
                      ]
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [-1 1299]
                )
              ]
              else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
              spids: [1307 1315]
            )
          ]
          spids: [1279]
        )
      spids: [1274 1278]
    )
    (FuncDef
      name: rev_is_descendant_of_branch
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newrev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [1328]
                )
              ]
              spids: [1328]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:branch)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [1334]
                )
              ]
              spids: [1334]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:branch_hash)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(git)} {(rev-parse)} {(DQ ($ VSub_Name "$branch"))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1341 1349]
                      )
                    }
                  spids: [1340]
                )
              ]
              spids: [1340]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:match)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(git)} {(rev-list)} {(-1)} {(DQ ($ VSub_Name "$branch_hash"))} 
                                {(DQ ("^") ($ VSub_Name "$newrev"))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1353 1368]
                      )
                    }
                  spids: [1352]
                )
              ]
              spids: [1352]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$match"))})]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [-1 1383]
                )
              ]
              else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
              spids: [1391 1399]
            )
          ]
          spids: [1325]
        )
      spids: [1320 1324]
    )
    (FuncDef
      name: try_remove_previous
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(rev_exists)} {(DQ ($ VSub_Number "$1") ("^"))})]
                  action: [(C {(echo)} {(DQ ("^") ($ VSub_Number "$1") ("^"))})]
                  spids: [-1 1431]
                )
              ]
              spids: [-1 1443]
            )
          ]
          spids: [1418]
        )
      spids: [1413 1417]
    )
    (FuncDef
      name: find_latest_squash
      body: 
        (BraceGroup
          children: [
            (C {(debug)} {(DQ ("Looking for latest squash (") ($ VSub_Name "$dir") (")..."))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [1465]
                )
              ]
              spids: [1465]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:sq) op:Equal rhs:{(SQ )} spids:[1471])]
              spids: [1471]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:main) op:Equal rhs:{(SQ )} spids:[1474])]
              spids: [1474]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:sub) op:Equal rhs:{(SQ )} spids:[1477])]
              spids: [1477]
            )
            (Pipeline
              children: [
                (C {(git)} {(log)} 
                  {(--grep) (Lit_Other "=") 
                    (DQ ("^git-subtree-dir: ") ($ VSub_Name "$dir") ("/*") 
                      (EscapedLiteralPart token:<Lit_EscapedChar "\\$">)
                    )
                  } {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (SQ <"START %H%n%s%n%n%b%nEND%n">)} {(HEAD)}
                )
                (While
                  cond: [(C {(read)} {(a)} {(b)} {(junk)})]
                  body: 
                    (DoGroup
                      children: [
                        (C {(debug)} 
                          {
                            (DQ ($ VSub_Name "$a") (" ") ($ VSub_Name "$b") (" ") ($ VSub_Name "$junk"))
                          }
                        )
                        (C {(debug)} 
                          {
                            (DQ ("{{") ($ VSub_Name "$sq") (/) ($ VSub_Name "$main") (/) 
                              ($ VSub_Name "$sub") ("}}")
                            )
                          }
                        )
                        (Case
                          to_match: {(DQ ($ VSub_Name "$a"))}
                          arms: [
                            (case_arm
                              pat_list: [{(START)}]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sq)
                                      op: Equal
                                      rhs: {(DQ ($ VSub_Name "$b"))}
                                      spids: [1559]
                                    )
                                  ]
                                  spids: [1559]
                                )
                              ]
                              spids: [1555 1556 1565 -1]
                            )
                            (case_arm
                              pat_list: [{(git-subtree-mainline) (Lit_Other ":")}]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:main)
                                      op: Equal
                                      rhs: {(DQ ($ VSub_Name "$b"))}
                                      spids: [1573]
                                    )
                                  ]
                                  spids: [1573]
                                )
                              ]
                              spids: [1568 1570 1579 -1]
                            )
                            (case_arm
                              pat_list: [{(git-subtree-split) (Lit_Other ":")}]
                              action: [
                                (AndOr
                                  children: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:sub)
                                          op: Equal
                                          rhs: 
                                            {
                                              (DQ 
                                                (CommandSubPart
                                                  command_list: 
                                                    (CommandList
                                                      children: [
                                                        (C {(git)} {(rev-parse)} 
                                                          {(DQ ($ VSub_Name "$b") ("^0"))}
                                                        )
                                                      ]
                                                    )
                                                  left_token: <Left_CommandSub "$(">
                                                  spids: [1589 1598]
                                                )
                                              )
                                            }
                                          spids: [1587]
                                        )
                                      ]
                                      spids: [1587]
                                    )
                                    (C {(die)} 
                                      {
                                        (DQ ("could not rev-parse split hash ") ($ VSub_Name "$b") 
                                          (" from commit ") ($ VSub_Name "$sq")
                                        )
                                      }
                                    )
                                  ]
                                  op_id: Op_DPipe
                                )
                              ]
                              spids: [1582 1584 1614 -1]
                            )
                            (case_arm
                              pat_list: [{(END)}]
                              action: [
                                (If
                                  arms: [
                                    (if_arm
                                      cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$sub"))})]
                                      action: [
                                        (If
                                          arms: [
                                            (if_arm
                                              cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$main"))})]
                                              action: [
                                                (Assignment
                                                  keyword: Assign_None
                                                  pairs: [
                                                    (assign_pair
                                                      lhs: (LhsName name:sq)
                                                      op: Equal
                                                      rhs: {(DQ ($ VSub_Name "$sub"))}
                                                      spids: [1657]
                                                    )
                                                  ]
                                                  spids: [1657]
                                                )
                                              ]
                                              spids: [-1 1646]
                                            )
                                          ]
                                          spids: [-1 1663]
                                        )
                                        (C {(debug)} 
                                          {
                                            (DQ ("Squash found: ") ($ VSub_Name "$sq") (" ") 
                                              ($ VSub_Name "$sub")
                                            )
                                          }
                                        )
                                        (C {(echo)} {(DQ ($ VSub_Name "$sq"))} 
                                          {(DQ ($ VSub_Name "$sub"))}
                                        )
                                        (ControlFlow
                                          token: <ControlFlow_Break break>
                                        )
                                      ]
                                      spids: [-1 1632]
                                    )
                                  ]
                                  spids: [-1 1690]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sq)
                                      op: Equal
                                      rhs: {(SQ )}
                                      spids: [1693]
                                    )
                                  ]
                                  spids: [1693]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:main)
                                      op: Equal
                                      rhs: {(SQ )}
                                      spids: [1696]
                                    )
                                  ]
                                  spids: [1696]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sub)
                                      op: Equal
                                      rhs: {(SQ )}
                                      spids: [1699]
                                    )
                                  ]
                                  spids: [1699]
                                )
                              ]
                              spids: [1617 1618 1702 -1]
                            )
                          ]
                          spids: [1546 1552 1705]
                        )
                      ]
                      spids: [1519 1708]
                    )
                )
              ]
              negated: False
            )
          ]
          spids: [1453]
        )
      spids: [1448 1452]
    )
    (FuncDef
      name: find_existing_splits
      body: 
        (BraceGroup
          children: [
            (C {(debug)} {(DQ ("Looking for prior splits..."))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [1728]
                )
              ]
              spids: [1728]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:revs)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [1734]
                )
              ]
              spids: [1734]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:main) op:Equal rhs:{(SQ )} spids:[1740])]
              spids: [1740]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:sub) op:Equal rhs:{(SQ )} spids:[1743])]
              spids: [1743]
            )
            (Pipeline
              children: [
                (C {(git)} {(log)} 
                  {(--grep) (Lit_Other "=") 
                    (DQ ("^git-subtree-dir: ") ($ VSub_Name "$dir") ("/*") 
                      (EscapedLiteralPart token:<Lit_EscapedChar "\\$">)
                    )
                  } {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (SQ <"START %H%n%s%n%n%b%nEND%n">)} 
                  {($ VSub_Name "$revs")}
                )
                (While
                  cond: [(C {(read)} {(a)} {(b)} {(junk)})]
                  body: 
                    (DoGroup
                      children: [
                        (Case
                          to_match: {(DQ ($ VSub_Name "$a"))}
                          arms: [
                            (case_arm
                              pat_list: [{(START)}]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sq)
                                      op: Equal
                                      rhs: {(DQ ($ VSub_Name "$b"))}
                                      spids: [1801]
                                    )
                                  ]
                                  spids: [1801]
                                )
                              ]
                              spids: [1797 1798 1807 -1]
                            )
                            (case_arm
                              pat_list: [{(git-subtree-mainline) (Lit_Other ":")}]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:main)
                                      op: Equal
                                      rhs: {(DQ ($ VSub_Name "$b"))}
                                      spids: [1815]
                                    )
                                  ]
                                  spids: [1815]
                                )
                              ]
                              spids: [1810 1812 1821 -1]
                            )
                            (case_arm
                              pat_list: [{(git-subtree-split) (Lit_Other ":")}]
                              action: [
                                (AndOr
                                  children: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:sub)
                                          op: Equal
                                          rhs: 
                                            {
                                              (DQ 
                                                (CommandSubPart
                                                  command_list: 
                                                    (CommandList
                                                      children: [
                                                        (C {(git)} {(rev-parse)} 
                                                          {(DQ ($ VSub_Name "$b") ("^0"))}
                                                        )
                                                      ]
                                                    )
                                                  left_token: <Left_CommandSub "$(">
                                                  spids: [1831 1840]
                                                )
                                              )
                                            }
                                          spids: [1829]
                                        )
                                      ]
                                      spids: [1829]
                                    )
                                    (C {(die)} 
                                      {
                                        (DQ ("could not rev-parse split hash ") ($ VSub_Name "$b") 
                                          (" from commit ") ($ VSub_Name "$sq")
                                        )
                                      }
                                    )
                                  ]
                                  op_id: Op_DPipe
                                )
                              ]
                              spids: [1824 1826 1856 -1]
                            )
                            (case_arm
                              pat_list: [{(END)}]
                              action: [
                                (C {(debug)} {(DQ ("  Main is: '") ($ VSub_Name "$main") ("'"))})
                                (If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (C {(test)} {(-z)} {(DQ ($ VSub_Name "$main"))} {(-a)} {(-n)} 
                                          {(DQ ($ VSub_Name "$sub"))}
                                        )
                                      ]
                                      action: [
                                        (C {(debug)} 
                                          {
                                            (DQ ("  Squash: ") ($ VSub_Name "$sq") (" from ") 
                                              ($ VSub_Name "$sub")
                                            )
                                          }
                                        )
                                        (C {(cache_set)} {(DQ ($ VSub_Name "$sq"))} 
                                          {(DQ ($ VSub_Name "$sub"))}
                                        )
                                      ]
                                      spids: [-1 1891]
                                    )
                                  ]
                                  spids: [-1 1919]
                                )
                                (If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (C {(test)} {(-n)} {(DQ ($ VSub_Name "$main"))} {(-a)} {(-n)} 
                                          {(DQ ($ VSub_Name "$sub"))}
                                        )
                                      ]
                                      action: [
                                        (C {(debug)} 
                                          {
                                            (DQ ("  Prior: ") ($ VSub_Name "$main") (" -> ") 
                                              ($ VSub_Name "$sub")
                                            )
                                          }
                                        )
                                        (C {(cache_set)} {($ VSub_Name "$main")} {($ VSub_Name "$sub")})
                                        (C {(cache_set)} {($ VSub_Name "$sub")} {($ VSub_Name "$sub")})
                                        (C {(try_remove_previous)} {(DQ ($ VSub_Name "$main"))})
                                        (C {(try_remove_previous)} {(DQ ($ VSub_Name "$sub"))})
                                      ]
                                      spids: [-1 1941]
                                    )
                                  ]
                                  spids: [-1 1982]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:main)
                                      op: Equal
                                      rhs: {(SQ )}
                                      spids: [1985]
                                    )
                                  ]
                                  spids: [1985]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sub)
                                      op: Equal
                                      rhs: {(SQ )}
                                      spids: [1988]
                                    )
                                  ]
                                  spids: [1988]
                                )
                              ]
                              spids: [1859 1860 1991 -1]
                            )
                          ]
                          spids: [1788 1794 1994]
                        )
                      ]
                      spids: [1785 1997]
                    )
                )
              ]
              negated: False
            )
          ]
          spids: [1718]
        )
      spids: [1713 1717]
    )
    (FuncDef
      name: copy_commit
      body: 
        (BraceGroup
          children: [
            (C {(debug)} {(copy_commit)} {(DQ ("{") ($ VSub_Number "$1") ("}"))} 
              {(DQ ("{") ($ VSub_Number "$2") ("}"))} {(DQ ("{") ($ VSub_Number "$3") ("}"))}
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(git)} {(log)} {(-1)} 
                      {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") 
                        (SQ <"%an%n%ae%n%aD%n%cn%n%ce%n%cD%n%B">)
                      } {(DQ ($ VSub_Number "$1"))}
                    )
                    (Subshell
                      child: 
                        (CommandList
                          children: [
                            (C {(read)} {(GIT_AUTHOR_NAME)})
                            (C {(read)} {(GIT_AUTHOR_EMAIL)})
                            (C {(read)} {(GIT_AUTHOR_DATE)})
                            (C {(read)} {(GIT_COMMITTER_NAME)})
                            (C {(read)} {(GIT_COMMITTER_EMAIL)})
                            (C {(read)} {(GIT_COMMITTER_DATE)})
                            (C {(export)} {(GIT_AUTHOR_NAME)} {(GIT_AUTHOR_EMAIL)} {(GIT_AUTHOR_DATE)} 
                              {(GIT_COMMITTER_NAME)} {(GIT_COMMITTER_EMAIL)} {(GIT_COMMITTER_DATE)}
                            )
                            (Pipeline
                              children: [
                                (Subshell
                                  child: 
                                    (CommandList
                                      children: [
                                        (C {(printf)} {(DQ ("%s"))} {(DQ ($ VSub_Name "$annotate"))})
                                        (C {(cat)})
                                      ]
                                    )
                                  spids: [2120 2137]
                                )
                                (C {(git)} {(commit-tree)} {(DQ ($ VSub_Number "$2"))} 
                                  {($ VSub_Number "$3")}
                                )
                              ]
                              negated: False
                            )
                          ]
                        )
                      spids: [2062 2156]
                    )
                  ]
                  negated: False
                )
                (C {(die)} {(DQ ("Can't copy commit ") ($ VSub_Number "$1"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [2007]
        )
      spids: [2002 2006]
    )
    (FuncDef
      name: add_msg
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2178]
                )
              ]
              spids: [2178]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_old)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [2184]
                )
              ]
              spids: [2184]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_new)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$3"))}
                  spids: [2190]
                )
              ]
              spids: [2190]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$message"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:commit_message)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$message"))}
                          spids: [2210]
                        )
                      ]
                      spids: [2210]
                    )
                  ]
                  spids: [-1 2207]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:commit_message)
                      op: Equal
                      rhs: 
                        {
                          (DQ ("Add '") ($ VSub_Name "$dir") ("/' from commit '") 
                            ($ VSub_Name "$latest_new") ("'")
                          )
                        }
                      spids: [2219]
                    )
                  ]
                  spids: [2219]
                )
              ]
              spids: [2216 2229]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLessDash
                  fd: -1
                  body: 
                    {
                      (DQ ($ VSub_Name "$commit_message") ("\n") ("\n") ("git-subtree-dir: ") 
                        ($ VSub_Name "$dir") ("\n") ("git-subtree-mainline: ") ($ VSub_Name "$latest_old") ("\n") ("git-subtree-split: ") 
                        ($ VSub_Name "$latest_new") ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [2234]
                )
              ]
            )
          ]
          spids: [2175]
        )
      spids: [2170 2174]
    )
    (FuncDef
      name: add_squashed_msg
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$message"))})]
                  action: [(C {(echo)} {(DQ ($ VSub_Name "$message"))})]
                  spids: [-1 2271]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ ("Merge commit '") ($ VSub_Number "$1") ("' as '") ($ VSub_Number "$2") ("'"))
                  }
                )
              ]
              spids: [2281 2295]
            )
          ]
          spids: [2257]
        )
      spids: [2252 2256]
    )
    (FuncDef
      name: rejoin_msg
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2308]
                )
              ]
              spids: [2308]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_old)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [2314]
                )
              ]
              spids: [2314]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_new)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$3"))}
                  spids: [2320]
                )
              ]
              spids: [2320]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$message"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:commit_message)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$message"))}
                          spids: [2340]
                        )
                      ]
                      spids: [2340]
                    )
                  ]
                  spids: [-1 2337]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:commit_message)
                      op: Equal
                      rhs: 
                        {
                          (DQ ("Split '") ($ VSub_Name "$dir") ("/' into commit '") 
                            ($ VSub_Name "$latest_new") ("'")
                          )
                        }
                      spids: [2349]
                    )
                  ]
                  spids: [2349]
                )
              ]
              spids: [2346 2359]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLessDash
                  fd: -1
                  body: 
                    {
                      (DQ ($ VSub_Name "$commit_message") ("\n") ("\n") ("git-subtree-dir: ") 
                        ($ VSub_Name "$dir") ("\n") ("git-subtree-mainline: ") ($ VSub_Name "$latest_old") ("\n") ("git-subtree-split: ") 
                        ($ VSub_Name "$latest_new") ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [2364]
                )
              ]
            )
          ]
          spids: [2305]
        )
      spids: [2300 2304]
    )
    (FuncDef
      name: squash_msg
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2390]
                )
              ]
              spids: [2390]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:oldsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [2396]
                )
              ]
              spids: [2396]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$3"))}
                  spids: [2402]
                )
              ]
              spids: [2402]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newsub_short)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(git)} {(rev-parse)} {(--short)} {(DQ ($ VSub_Name "$newsub"))})
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [2409 2419]
                      )
                    }
                  spids: [2408]
                )
              ]
              spids: [2408]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$oldsub"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:oldsub_short)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(git)} {(rev-parse)} {(--short)} {(DQ ($ VSub_Name "$oldsub"))})
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [2438 2448]
                              )
                            }
                          spids: [2437]
                        )
                      ]
                      spids: [2437]
                    )
                    (C {(echo)} 
                      {
                        (DQ ("Squashed '") ($ VSub_Name "$dir") ("/' changes from ") 
                          ($ VSub_Name "$oldsub_short") (..) ($ VSub_Name "$newsub_short")
                        )
                      }
                    )
                    (C {(echo)})
                    (C {(git)} {(log)} 
                      {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (SQ <"%h %s">)} {(DQ ($ VSub_Name "$oldsub") (..) ($ VSub_Name "$newsub"))}
                    )
                    (C {(git)} {(log)} 
                      {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (SQ <"REVERT: %h %s">)} {(DQ ($ VSub_Name "$newsub") (..) ($ VSub_Name "$oldsub"))}
                    )
                  ]
                  spids: [-1 2434]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ ("Squashed '") ($ VSub_Name "$dir") ("/' content from commit ") 
                      ($ VSub_Name "$newsub_short")
                    )
                  }
                )
              ]
              spids: [2504 2517]
            )
            (C {(echo)})
            (C {(echo)} {(DQ ("git-subtree-dir: ") ($ VSub_Name "$dir"))})
            (C {(echo)} {(DQ ("git-subtree-split: ") ($ VSub_Name "$newsub"))})
          ]
          spids: [2387]
        )
      spids: [2382 2386]
    )
    (FuncDef
      name: toptree_for_commit
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:commit)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2550]
                )
              ]
              spids: [2550]
            )
            (AndOr
              children: [
                (C {(git)} {(log)} {(-1)} 
                  {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (SQ <"%T">)} {(DQ ($ VSub_Name "$commit"))} {(--)}
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [2547]
        )
      spids: [2542 2546]
    )
    (FuncDef
      name: subtree_for_commit
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:commit)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2593]
                )
              ]
              spids: [2593]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [2599]
                )
              ]
              spids: [2599]
            )
            (Pipeline
              children: [
                (C {(git)} {(ls-tree)} {(DQ ($ VSub_Name "$commit"))} {(--)} {(DQ ($ VSub_Name "$dir"))})
                (While
                  cond: [(C {(read)} {(mode)} {(type)} {(tree)} {(name)})]
                  body: 
                    (DoGroup
                      children: [
                        (C {(assert)} {(test)} {(DQ ($ VSub_Name "$name"))} {(Lit_Other "=")} 
                          {(DQ ($ VSub_Name "$dir"))}
                        )
                        (C {(assert)} {(test)} {(DQ ($ VSub_Name "$type"))} {(Lit_Other "=")} {(DQ (tree))} 
                          {(-o)} {(DQ ($ VSub_Name "$type"))} {(Lit_Other "=")} {(DQ (commit))}
                        )
                        (AndOr
                          children: [
                            (C {(test)} {(DQ ($ VSub_Name "$type"))} {(Lit_Other "=")} {(DQ (commit))})
                            (ControlFlow
                              token: <ControlFlow_Continue continue>
                            )
                          ]
                          op_id: Op_DAmp
                        )
                        (C {(echo)} {($ VSub_Name "$tree")})
                        (ControlFlow token:<ControlFlow_Break break>)
                      ]
                      spids: [2635 2708]
                    )
                )
              ]
              negated: False
            )
          ]
          spids: [2590]
        )
      spids: [2585 2589]
    )
    (FuncDef
      name: tree_changed
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tree)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [2721]
                )
              ]
              spids: [2721]
            )
            (C {(shift)})
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound "$#")} {(-ne)} {(1)})]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [-1 2739]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:ptree)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(toptree_for_commit)} {($ VSub_Number "$1")})]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [2754 2758]
                          )
                        }
                      spids: [2753]
                    )
                  ]
                  spids: [2753]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (C {(test)} {(DQ ($ VSub_Name "$ptree"))} {(KW_Bang "!") (Lit_Other "=")} 
                          {(DQ ($ VSub_Name "$tree"))}
                        )
                      ]
                      action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                      spids: [-1 2777]
                    )
                  ]
                  else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                  spids: [2788 2799]
                )
              ]
              spids: [2750 2802]
            )
          ]
          spids: [2718]
        )
      spids: [2713 2717]
    )
    (FuncDef
      name: new_squash_commit
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:old)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2815]
                )
              ]
              spids: [2815]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:oldsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [2821]
                )
              ]
              spids: [2821]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$3"))}
                  spids: [2827]
                )
              ]
              spids: [2827]
            )
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:tree)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(toptree_for_commit)} {($ VSub_Name "$newsub")})]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [2834 2838]
                          )
                        }
                      spids: [2833]
                    )
                  ]
                  spids: [2833]
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$old"))})]
                  action: [
                    (AndOr
                      children: [
                        (Pipeline
                          children: [
                            (C {(squash_msg)} {(DQ ($ VSub_Name "$dir"))} {(DQ ($ VSub_Name "$oldsub"))} 
                              {(DQ ($ VSub_Name "$newsub"))}
                            )
                            (C {(git)} {(commit-tree)} {(DQ ($ VSub_Name "$tree"))} {(-p)} 
                              {(DQ ($ VSub_Name "$old"))}
                            )
                          ]
                          negated: False
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 2858]
                )
              ]
              else_action: [
                (AndOr
                  children: [
                    (Pipeline
                      children: [
                        (C {(squash_msg)} {(DQ ($ VSub_Name "$dir"))} {(DQ )} 
                          {(DQ ($ VSub_Name "$newsub"))}
                        )
                        (C {(git)} {(commit-tree)} {(DQ ($ VSub_Name "$tree"))})
                      ]
                      negated: False
                    )
                    (C {(exit)} {($ VSub_QMark "$?")})
                  ]
                  op_id: Op_DPipe
                )
              ]
              spids: [2899 2933]
            )
          ]
          spids: [2812]
        )
      spids: [2807 2811]
    )
    (FuncDef
      name: copy_or_skip
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2946]
                )
              ]
              spids: [2946]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tree)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [2952]
                )
              ]
              spids: [2952]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newparents)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$3"))}
                  spids: [2958]
                )
              ]
              spids: [2958]
            )
            (C {(assert)} {(test)} {(-n)} {(DQ ($ VSub_Name "$tree"))})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:identical) op:Equal rhs:{(SQ )} spids:[2976])]
              spids: [2976]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:nonidentical) op:Equal rhs:{(SQ )} spids:[2979])]
              spids: [2979]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:p) op:Equal rhs:{(SQ )} spids:[2982])]
              spids: [2982]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:gotparents) op:Equal rhs:{(SQ )} spids:[2985])]
              spids: [2985]
            )
            (ForEach
              iter_name: parent
              iter_words: [{($ VSub_Name "$newparents")}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:ptree)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [(C {(toptree_for_commit)} {($ VSub_Name "$parent")})]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [3001 3005]
                                  )
                                }
                              spids: [3000]
                            )
                          ]
                          spids: [3000]
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                    (AndOr
                      children: [
                        (C {(test)} {(-z)} {(DQ ($ VSub_Name "$ptree"))})
                        (ControlFlow token:<ControlFlow_Continue continue>)
                      ]
                      op_id: Op_DAmp
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(test)} {(DQ ($ VSub_Name "$ptree"))} {(Lit_Other "=")} 
                              {(DQ ($ VSub_Name "$tree"))}
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:identical)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name "$parent"))}
                                  spids: [3049]
                                )
                              ]
                              spids: [3049]
                            )
                          ]
                          spids: [-1 3042]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:nonidentical)
                              op: Equal
                              rhs: {(DQ ($ VSub_Name "$parent"))}
                              spids: [3058]
                            )
                          ]
                          spids: [3058]
                        )
                      ]
                      spids: [3055 3064]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:is_new) op:Equal rhs:{(1)} spids:[3076])]
                      spids: [3076]
                    )
                    (ForEach
                      iter_name: gp
                      iter_words: [{($ VSub_Name "$gotparents")}]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (C {(test)} {(DQ ($ VSub_Name "$gp"))} {(Lit_Other "=")} 
                                      {(DQ ($ VSub_Name "$parent"))}
                                    )
                                  ]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:is_new)
                                          op: Equal
                                          rhs: {(SQ )}
                                          spids: [3110]
                                        )
                                      ]
                                      spids: [3110]
                                    )
                                    (ControlFlow
                                      token: <ControlFlow_Break break>
                                    )
                                  ]
                                  spids: [-1 3107]
                                )
                              ]
                              spids: [-1 3116]
                            )
                          ]
                          spids: [3089 3119]
                        )
                      spids: [3085 -1]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$is_new"))})]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:gotparents)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name "$gotparents") (" ") ($ VSub_Name "$parent"))}
                                  spids: [3136]
                                )
                              ]
                              spids: [3136]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:p)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name "$p") (" -p ") ($ VSub_Name "$parent"))}
                                  spids: [3144]
                                )
                              ]
                              spids: [3144]
                            )
                          ]
                          spids: [-1 3133]
                        )
                      ]
                      spids: [-1 3152]
                    )
                  ]
                  spids: [2997 3155]
                )
              spids: [2993 -1]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:copycommit) op:Equal rhs:{(SQ )} spids:[3159])]
              spids: [3159]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name "$identical"))})
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name "$nonidentical"))})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:extras)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(git)} {(rev-list)} {(--count)} 
                                        {($ VSub_Name "$identical") (..) 
                                          ($ VSub_Name "$nonidentical")
                                        }
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [3187 3197]
                              )
                            }
                          spids: [3186]
                        )
                      ]
                      spids: [3186]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(test)} {(DQ ($ VSub_Name "$extras"))} {(-ne)} {(0)})]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:copycommit)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [3220]
                                )
                              ]
                              spids: [3220]
                            )
                          ]
                          spids: [-1 3213]
                        )
                      ]
                      spids: [-1 3224]
                    )
                  ]
                  spids: [-1 3183]
                )
              ]
              spids: [-1 3227]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name "$identical"))})
                        (C {(test)} {(-z)} {(DQ ($ VSub_Name "$copycommit"))})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [(C {(echo)} {($ VSub_Name "$identical")})]
                  spids: [-1 3251]
                )
              ]
              else_action: [
                (AndOr
                  children: [
                    (C {(copy_commit)} {(DQ ($ VSub_Name "$rev"))} {(DQ ($ VSub_Name "$tree"))} 
                      {(DQ ($ VSub_Name "$p"))}
                    )
                    (C {(exit)} {($ VSub_QMark "$?")})
                  ]
                  op_id: Op_DPipe
                )
              ]
              spids: [3259 3283]
            )
          ]
          spids: [2943]
        )
      spids: [2938 2942]
    )
    (FuncDef
      name: ensure_clean
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [{(git)} {(diff-index)} {(HEAD)} {(--exit-code)} {(--quiet)}]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[3310])]
                        )
                      ]
                      negated: True
                    )
                  ]
                  action: [(C {(die)} {(DQ ("Working tree has modifications.  Cannot add."))})]
                  spids: [-1 3314]
                )
              ]
              spids: [-1 3324]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [{(git)} {(diff-index)} {(--cached)} {(HEAD)} {(--exit-code)} {(--quiet)}]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[3343])]
                        )
                      ]
                      negated: True
                    )
                  ]
                  action: [(C {(die)} {(DQ ("Index has modifications.  Cannot add."))})]
                  spids: [-1 3347]
                )
              ]
              spids: [-1 3357]
            )
          ]
          spids: [3293]
        )
      spids: [3288 3292]
    )
    (FuncDef
      name: ensure_valid_ref_format
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(git)} {(check-ref-format)} {(DQ (refs/heads/) ($ VSub_Number "$1"))})
                (C {(die)} {(DQ ("'") ($ VSub_Number "$1") ("' does not look like a ref"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [3367]
        )
      spids: [3362 3366]
    )
    (FuncDef
      name: cmd_add
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-e)} {(DQ ($ VSub_Name "$dir"))})]
                  action: [
                    (C {(die)} {(DQ ("'") ($ VSub_Name "$dir") ("' already exists.  Cannot add."))})
                  ]
                  spids: [-1 3412]
                )
              ]
              spids: [-1 3424]
            )
            (C {(ensure_clean)})
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound "$#")} {(-eq)} {(1)})]
                  action: [
                    (AndOr
                      children: [
                        (SimpleCommand
                          words: [
                            {(git)}
                            {(rev-parse)}
                            {(-q)}
                            {(--verify)}
                            {(DQ ($ VSub_Number "$1") ("^{commit}"))}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(/dev/null)}
                              spids: [3459]
                            )
                          ]
                        )
                        (C {(die)} {(DQ ("'") ($ VSub_Number "$1") ("' does not refer to a commit"))})
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(cmd_add_commit)} {(DQ ($ VSub_At "$@"))})
                  ]
                  spids: [-1 3443]
                )
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound "$#")} {(-eq)} {(2)})]
                  action: [
                    (C {(ensure_valid_ref_format)} {(DQ ($ VSub_Number "$2"))})
                    (C {(cmd_add_repository)} {(DQ ($ VSub_At "$@"))})
                  ]
                  spids: [3483 3494]
                )
              ]
              else_action: [
                (C {(say)} {(DQ ("error: parameters were '") ($ VSub_At "$@") ("'"))})
                (C {(die)} {(DQ ("Provide either a commit or a repository and commit."))})
              ]
              spids: [3532 3551]
            )
          ]
          spids: [3398]
        )
      spids: [3393 3397]
    )
    (FuncDef
      name: cmd_add_repository
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("git fetch"))} {(DQ ($ VSub_At "$@"))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:repository)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [3575]
                )
              ]
              spids: [3575]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:refspec)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [3579]
                )
              ]
              spids: [3579]
            )
            (AndOr
              children: [
                (C {(git)} {(fetch)} {(DQ ($ VSub_At "$@"))})
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:revs) op:Equal rhs:{(FETCH_HEAD)} spids:[3598])]
              spids: [3598]
            )
            (C {(set)} {(--)} {($ VSub_Name "$revs")})
            (C {(cmd_add_commit)} {(DQ ($ VSub_At "$@"))})
          ]
          spids: [3561]
        )
      spids: [3556 3560]
    )
    (FuncDef
      name: cmd_add_commit
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:revs)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(git)} {(rev-parse)} {($ VSub_Name "$default")} {(--revs-only)} 
                                    {(DQ ($ VSub_At "$@"))}
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [3627 3639]
                          )
                        }
                      spids: [3626]
                    )
                  ]
                  spids: [3626]
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (C {(set)} {(--)} {($ VSub_Name "$revs")})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [3655]
                )
              ]
              spids: [3655]
            )
            (C {(debug)} {(DQ ("Adding ") ($ VSub_Name "$dir") (" as '") ($ VSub_Name "$rev") ("'..."))})
            (AndOr
              children: [
                (C {(git)} {(read-tree)} {(--prefix) (Lit_Other "=") (DQ ($ VSub_Name "$dir"))} 
                  {($ VSub_Name "$rev")}
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(git)} {(checkout)} {(--)} {(DQ ($ VSub_Name "$dir"))})
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:tree)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: (CommandList children:[(C {(git)} {(write-tree)})])
                            left_token: <Left_CommandSub "$(">
                            spids: [3710 3714]
                          )
                        }
                      spids: [3709]
                    )
                  ]
                  spids: [3709]
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:headrev)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(HEAD)})])
                            left_token: <Left_CommandSub "$(">
                            spids: [3725 3731]
                          )
                        }
                      spids: [3724]
                    )
                  ]
                  spids: [3724]
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name "$headrev"))})
                        (C {(test)} {(DQ ($ VSub_Name "$headrev"))} {(KW_Bang "!") (Lit_Other "=")} 
                          {(DQ ($ VSub_Name "$rev"))}
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:headp)
                          op: Equal
                          rhs: {(DQ ("-p ") ($ VSub_Name "$headrev"))}
                          spids: [3769]
                        )
                      ]
                      spids: [3769]
                    )
                  ]
                  spids: [-1 3766]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:headp) op:Equal rhs:{(SQ )} spids:[3779])]
                  spids: [3779]
                )
              ]
              spids: [3776 3782]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$squash"))})]
                  action: [
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:rev)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (C {(new_squash_commit)} {(DQ )} {(DQ )} 
                                            {(DQ ($ VSub_Name "$rev"))}
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [3801 3813]
                                  )
                                }
                              spids: [3800]
                            )
                          ]
                          spids: [3800]
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:commit)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (Pipeline
                                            children: [
                                              (C {(add_squashed_msg)} {(DQ ($ VSub_Name "$rev"))} 
                                                {(DQ ($ VSub_Name "$dir"))}
                                              )
                                              (C {(git)} {(commit-tree)} {(DQ ($ VSub_Name "$tree"))} 
                                                {($ VSub_Name "$headp")} {(-p)} {(DQ ($ VSub_Name "$rev"))}
                                              )
                                            ]
                                            negated: False
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [3823 3852]
                                  )
                                }
                              spids: [3822]
                            )
                          ]
                          spids: [3822]
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 3797]
                )
              ]
              else_action: [
                (AndOr
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:revp)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(peel_committish)} {(DQ ($ VSub_Name "$rev"))})]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [3865 3871]
                              )
                            }
                          spids: [3864]
                        )
                      ]
                      spids: [3864]
                    )
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:commit)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (Pipeline
                                            children: [
                                              (C {(add_msg)} {(DQ ($ VSub_Name "$dir"))} 
                                                {($ VSub_Name "$headrev")} {(DQ ($ VSub_Name "$rev"))}
                                              )
                                              (C {(git)} {(commit-tree)} {(DQ ($ VSub_Name "$tree"))} 
                                                {($ VSub_Name "$headp")} {(-p)} {(DQ ($ VSub_Name "$revp"))}
                                              )
                                            ]
                                            negated: False
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [3877 3908]
                                  )
                                }
                              spids: [3876]
                            )
                          ]
                          spids: [3876]
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              spids: [3861 3917]
            )
            (AndOr
              children: [
                (C {(git)} {(reset)} {(DQ ($ VSub_Name "$commit"))})
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (C {(say)} {(DQ ("Added dir '") ($ VSub_Name "$dir") ("'"))})
          ]
          spids: [3623]
        )
      spids: [3618 3622]
    )
    (FuncDef
      name: cmd_split
      body: 
        (BraceGroup
          children: [
            (C {(debug)} {(DQ ("Splitting ") ($ VSub_Name "$dir") (...))})
            (AndOr
              children: [(C {(cache_setup)}) (C {(exit)} {($ VSub_QMark "$?")})]
              op_id: Op_DPipe
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$onto"))})]
                  action: [
                    (C {(debug)} {(DQ ("Reading history for --onto=") ($ VSub_Name "$onto") (...))})
                    (Pipeline
                      children: [
                        (C {(git)} {(rev-list)} {($ VSub_Name "$onto")})
                        (While
                          cond: [(C {(read)} {(rev)})]
                          body: 
                            (DoGroup
                              children: [
                                (C {(debug)} {(DQ ("  cache: ") ($ VSub_Name "$rev"))})
                                (C {(cache_set)} {(DQ ($ VSub_Name "$rev"))} {(DQ ($ VSub_Name "$rev"))})
                              ]
                              spids: [4013 4043]
                            )
                        )
                      ]
                      negated: False
                    )
                  ]
                  spids: [-1 3985]
                )
              ]
              spids: [-1 4046]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$ignore_joins"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:unrevs)
                          op: Equal
                          rhs: {(SQ )}
                          spids: [4064]
                        )
                      ]
                      spids: [4064]
                    )
                  ]
                  spids: [-1 4061]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:unrevs)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (C {(find_existing_splits)} {(DQ ($ VSub_Name "$dir"))} 
                                      {(DQ ($ VSub_Name "$revs"))}
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [4072 4082]
                            )
                          )
                        }
                      spids: [4070]
                    )
                  ]
                  spids: [4070]
                )
              ]
              spids: [4067 4086]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:grl)
                  op: Equal
                  rhs: {(SQ <"git rev-list --topo-order --reverse --parents $revs $unrevs">)}
                  spids: [4102]
                )
              ]
              spids: [4102]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:revmax)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [(C {(eval)} {(DQ ($ VSub_Name "$grl"))}) (C {(wc)} {(-l)})]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [4109 4121]
                      )
                    }
                  spids: [4108]
                )
              ]
              spids: [4108]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:revcount) op:Equal rhs:{(0)} spids:[4124])]
              spids: [4124]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:createcount) op:Equal rhs:{(0)} spids:[4128])]
              spids: [4128]
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(eval)} {(DQ ($ VSub_Name "$grl"))})
                    (While
                      cond: [(C {(read)} {(rev)} {(parents)})]
                      body: 
                        (DoGroup
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:revcount)
                                  op: Equal
                                  rhs: 
                                    {
                                      (ArithSubPart
                                        anode: 
                                          (ArithBinary
                                            op_id: Arith_Plus
                                            left: (ArithWord w:{($ VSub_Name "$revcount")})
                                            right: (ArithWord w:{(Lit_Digits 1)})
                                          )
                                        spids: [4154 4161]
                                      )
                                    }
                                  spids: [4153]
                                )
                              ]
                              spids: [4153]
                            )
                            (C {(progress)} 
                              {
                                (DQ ($ VSub_Name "$revcount") (/) ($ VSub_Name "$revmax") (" (") 
                                  ($ VSub_Name "$createcount") (")")
                                )
                              }
                            )
                            (C {(debug)} {(DQ ("Processing commit: ") ($ VSub_Name "$rev"))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:exists)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [(C {(cache_get)} {(DQ ($ VSub_Name "$rev"))})]
                                          )
                                        left_token: <Left_CommandSub "$(">
                                        spids: [4185 4191]
                                      )
                                    }
                                  spids: [4184]
                                )
                              ]
                              spids: [4184]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$exists"))})]
                                  action: [
                                    (C {(debug)} {(DQ ("  prior: ") ($ VSub_Name "$exists"))})
                                    (ControlFlow
                                      token: <ControlFlow_Continue continue>
                                    )
                                  ]
                                  spids: [-1 4205]
                                )
                              ]
                              spids: [-1 4219]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:createcount)
                                  op: Equal
                                  rhs: 
                                    {
                                      (ArithSubPart
                                        anode: 
                                          (ArithBinary
                                            op_id: Arith_Plus
                                            left: (ArithWord w:{($ VSub_Name "$createcount")})
                                            right: (ArithWord w:{(Lit_Digits 1)})
                                          )
                                        spids: [4223 4230]
                                      )
                                    }
                                  spids: [4222]
                                )
                              ]
                              spids: [4222]
                            )
                            (C {(debug)} {(DQ ("  parents: ") ($ VSub_Name "$parents"))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:newparents)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [(C {(cache_get)} {($ VSub_Name "$parents")})]
                                          )
                                        left_token: <Left_CommandSub "$(">
                                        spids: [4242 4246]
                                      )
                                    }
                                  spids: [4241]
                                )
                              ]
                              spids: [4241]
                            )
                            (C {(debug)} {(DQ ("  newparents: ") ($ VSub_Name "$newparents"))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:tree)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [
                                              (C {(subtree_for_commit)} {(DQ ($ VSub_Name "$rev"))} 
                                                {(DQ ($ VSub_Name "$dir"))}
                                              )
                                            ]
                                          )
                                        left_token: <Left_CommandSub "$(">
                                        spids: [4259 4269]
                                      )
                                    }
                                  spids: [4258]
                                )
                              ]
                              spids: [4258]
                            )
                            (C {(debug)} {(DQ ("  tree is: ") ($ VSub_Name "$tree"))})
                            (C {(check_parents)} {($ VSub_Name "$parents")})
                            (If
                              arms: [
                                (if_arm
                                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$tree"))})]
                                  action: [
                                    (C {(set_notree)} {(DQ ($ VSub_Name "$rev"))})
                                    (If
                                      arms: [
                                        (if_arm
                                          cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$newparents"))})]
                                          action: [
                                            (C {(cache_set)} {(DQ ($ VSub_Name "$rev"))} 
                                              {(DQ ($ VSub_Name "$rev"))}
                                            )
                                          ]
                                          spids: [-1 4327]
                                        )
                                      ]
                                      spids: [-1 4341]
                                    )
                                    (ControlFlow
                                      token: <ControlFlow_Continue continue>
                                    )
                                  ]
                                  spids: [-1 4306]
                                )
                              ]
                              spids: [-1 4347]
                            )
                            (AndOr
                              children: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:newrev)
                                      op: Equal
                                      rhs: 
                                        {
                                          (CommandSubPart
                                            command_list: 
                                              (CommandList
                                                children: [
                                                  (C {(copy_or_skip)} {(DQ ($ VSub_Name "$rev"))} 
                                                    {(DQ ($ VSub_Name "$tree"))} {(DQ ($ VSub_Name "$newparents"))}
                                                  )
                                                ]
                                              )
                                            left_token: <Left_CommandSub "$(">
                                            spids: [4352 4366]
                                          )
                                        }
                                      spids: [4351]
                                    )
                                  ]
                                  spids: [4351]
                                )
                                (C {(exit)} {($ VSub_QMark "$?")})
                              ]
                              op_id: Op_DPipe
                            )
                            (C {(debug)} {(DQ ("  newrev is: ") ($ VSub_Name "$newrev"))})
                            (C {(cache_set)} {(DQ ($ VSub_Name "$rev"))} {(DQ ($ VSub_Name "$newrev"))})
                            (C {(cache_set)} {(latest_new)} {(DQ ($ VSub_Name "$newrev"))})
                            (C {(cache_set)} {(latest_old)} {(DQ ($ VSub_Name "$rev"))})
                          ]
                          spids: [4150 4412]
                        )
                    )
                  ]
                  negated: False
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_new)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(cache_get)} {(latest_new)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [4423 4427]
                      )
                    }
                  spids: [4422]
                )
              ]
              spids: [4422]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$latest_new"))})]
                  action: [(C {(die)} {(DQ ("No new revisions were found"))})]
                  spids: [-1 4441]
                )
              ]
              spids: [-1 4451]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$rejoin"))})]
                  action: [
                    (C {(debug)} {(DQ ("Merging split branch into HEAD..."))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:latest_old)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(cache_get)} {(latest_old)})]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [4477 4481]
                              )
                            }
                          spids: [4476]
                        )
                      ]
                      spids: [4476]
                    )
                    (AndOr
                      children: [
                        (SimpleCommand
                          words: [
                            {(git)}
                            {(merge)}
                            {(-s)}
                            {(ours)}
                            {(--allow-unrelated-histories)}
                            {(-m)}
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(rejoin_msg)} {(DQ ($ VSub_Name "$dir"))} 
                                          {(DQ ($ VSub_Name "$latest_old"))} {(DQ ($ VSub_Name "$latest_new"))}
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [4501 4515]
                                )
                              )
                            }
                            {(DQ ($ VSub_Name "$latest_new"))}
                          ]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[4524])]
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 4466]
                )
              ]
              spids: [-1 4534]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$branch"))})]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(rev_exists)} {(DQ (refs/heads/) ($ VSub_Name "$branch"))})]
                          action: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Pipeline
                                      children: [
                                        (C {(rev_is_descendant_of_branch)} 
                                          {(DQ ($ VSub_Name "$latest_new"))} {(DQ ($ VSub_Name "$branch"))}
                                        )
                                      ]
                                      negated: True
                                    )
                                  ]
                                  action: [
                                    (C {(die)} 
                                      {
                                        (DQ ("Branch '") ($ VSub_Name "$branch") 
                                          ("' is not an ancestor of commit '") ($ VSub_Name "$latest_new") ("'.")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [-1 4579]
                                )
                              ]
                              spids: [-1 4593]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:action)
                                  op: Equal
                                  rhs: {(SQ <Updated>)}
                                  spids: [4596]
                                )
                              ]
                              spids: [4596]
                            )
                          ]
                          spids: [-1 4561]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:action)
                              op: Equal
                              rhs: {(SQ <Created>)}
                              spids: [4605]
                            )
                          ]
                          spids: [4605]
                        )
                      ]
                      spids: [4602 4611]
                    )
                    (AndOr
                      children: [
                        (C {(git)} {(update-ref)} {(-m)} {(SQ <"subtree split">)} 
                          {(DQ (refs/heads/) ($ VSub_Name "$branch"))} {(DQ ($ VSub_Name "$latest_new"))}
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(say)} 
                      {(DQ ($ VSub_Name "$action") (" branch '") ($ VSub_Name "$branch") ("'"))}
                    )
                  ]
                  spids: [-1 4548]
                )
              ]
              spids: [-1 4652]
            )
            (C {(echo)} {(DQ ($ VSub_Name "$latest_new"))})
            (C {(exit)} {(0)})
          ]
          spids: [3952]
        )
      spids: [3947 3951]
    )
    (FuncDef
      name: cmd_merge
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:revs)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(git)} {(rev-parse)} {($ VSub_Name "$default")} {(--revs-only)} 
                                    {(DQ ($ VSub_At "$@"))}
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [4678 4690]
                          )
                        }
                      spids: [4677]
                    )
                  ]
                  spids: [4677]
                )
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (C {(ensure_clean)})
            (C {(set)} {(--)} {($ VSub_Name "$revs")})
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound "$#")} {(-ne)} {(1)})]
                  action: [
                    (C {(die)} 
                      {
                        (DQ ("You must provide exactly one revision.  Got: '") ($ VSub_Name "$revs") 
                          ("'")
                        )
                      }
                    )
                  ]
                  spids: [-1 4721]
                )
              ]
              spids: [-1 4733]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [4736]
                )
              ]
              spids: [4736]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$squash"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:first_split)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(find_latest_squash)} {(DQ ($ VSub_Name "$dir"))})]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [4759 4765]
                                )
                              )
                            }
                          spids: [4757]
                        )
                      ]
                      spids: [4757]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$first_split"))})]
                          action: [
                            (C {(die)} 
                              {
                                (DQ ("Can't squash-merge: '") ($ VSub_Name "$dir") 
                                  ("' was never added.")
                                )
                              }
                            )
                          ]
                          spids: [-1 4780]
                        )
                      ]
                      spids: [-1 4792]
                    )
                    (C {(set)} {($ VSub_Name "$first_split")})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:old)
                          op: Equal
                          rhs: {($ VSub_Number "$1")}
                          spids: [4800]
                        )
                      ]
                      spids: [4800]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:sub)
                          op: Equal
                          rhs: {($ VSub_Number "$2")}
                          spids: [4804]
                        )
                      ]
                      spids: [4804]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(test)} {(DQ ($ VSub_Name "$sub"))} {(Lit_Other "=")} 
                              {(DQ ($ VSub_Name "$rev"))}
                            )
                          ]
                          action: [
                            (C {(say)} {(DQ ("Subtree is already at commit ") ($ VSub_Name "$rev") (.))})
                            (C {(exit)} {(0)})
                          ]
                          spids: [-1 4823]
                        )
                      ]
                      spids: [-1 4840]
                    )
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:new)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (C {(new_squash_commit)} {(DQ ($ VSub_Name "$old"))} 
                                            {(DQ ($ VSub_Name "$sub"))} {(DQ ($ VSub_Name "$rev"))}
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [4844 4858]
                                  )
                                }
                              spids: [4843]
                            )
                          ]
                          spids: [4843]
                        )
                        (C {(exit)} {($ VSub_QMark "$?")})
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(debug)} {(DQ ("New squash commit: ") ($ VSub_Name "$new"))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:rev)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$new"))}
                          spids: [4875]
                        )
                      ]
                      spids: [4875]
                    )
                  ]
                  spids: [-1 4754]
                )
              ]
              spids: [-1 4881]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(git)} {(version)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [4886 4890]
                      )
                    }
                  spids: [4885]
                )
              ]
              spids: [4885]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} {(DQ ($ VSub_Name "$version"))} 
                      {(EscapedLiteralPart token:<Lit_EscapedChar "\\<">)} {(DQ ("git version 1.7"))}
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$message"))})]
                          action: [
                            (C {(git)} {(merge)} {(-s)} {(subtree)} 
                              {(--message) (Lit_Other "=") (DQ ($ VSub_Name "$message"))} {(DQ ($ VSub_Name "$rev"))}
                            )
                          ]
                          spids: [-1 4922]
                        )
                      ]
                      else_action: [(C {(git)} {(merge)} {(-s)} {(subtree)} {(DQ ($ VSub_Name "$rev"))})]
                      spids: [4944 4960]
                    )
                  ]
                  spids: [-1 4908]
                )
              ]
              else_action: [
                (If
                  arms: [
                    (if_arm
                      cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$message"))})]
                      action: [
                        (C {(git)} {(merge)} {(-Xsubtree) (Lit_Other "=") (DQ ($ VSub_Name "$prefix"))} 
                          {(--message) (Lit_Other "=") (DQ ($ VSub_Name "$message"))} {(DQ ($ VSub_Name "$rev"))}
                        )
                      ]
                      spids: [-1 4977]
                    )
                  ]
                  else_action: [
                    (C {(git)} {(merge)} {(-Xsubtree) (Lit_Other "=") (DQ ($ VSub_Name "$prefix"))} 
                      {($ VSub_Name "$rev")}
                    )
                  ]
                  spids: [5003 5019]
                )
              ]
              spids: [4963 5022]
            )
          ]
          spids: [4674]
        )
      spids: [4669 4673]
    )
    (FuncDef
      name: cmd_pull
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound "$#")} {(-ne)} {(2)})]
                  action: [(C {(die)} {(DQ ("You must provide <repository> <ref>"))})]
                  spids: [-1 5046]
                )
              ]
              spids: [-1 5056]
            )
            (C {(ensure_clean)})
            (C {(ensure_valid_ref_format)} {(DQ ($ VSub_Number "$2"))})
            (AndOr
              children: [
                (C {(git)} {(fetch)} {(DQ ($ VSub_At "$@"))})
                (C {(exit)} {($ VSub_QMark "$?")})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:revs) op:Equal rhs:{(FETCH_HEAD)} spids:[5084])]
              spids: [5084]
            )
            (C {(set)} {(--)} {($ VSub_Name "$revs")})
            (C {(cmd_merge)} {(DQ ($ VSub_At "$@"))})
          ]
          spids: [5032]
        )
      spids: [5027 5031]
    )
    (FuncDef
      name: cmd_push
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound "$#")} {(-ne)} {(2)})]
                  action: [(C {(die)} {(DQ ("You must provide <repository> <ref>"))})]
                  spids: [-1 5123]
                )
              ]
              spids: [-1 5133]
            )
            (C {(ensure_valid_ref_format)} {(DQ ($ VSub_Number "$2"))})
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-e)} {(DQ ($ VSub_Name "$dir"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:repository)
                          op: Equal
                          rhs: {($ VSub_Number "$1")}
                          spids: [5157]
                        )
                      ]
                      spids: [5157]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:refspec)
                          op: Equal
                          rhs: {($ VSub_Number "$2")}
                          spids: [5161]
                        )
                      ]
                      spids: [5161]
                    )
                    (C {(echo)} {(DQ ("git push using: "))} {(DQ ($ VSub_Name "$repository"))} 
                      {(DQ ($ VSub_Name "$refspec"))}
                    )
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:localrev)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (C {(git)} {(subtree)} {(split)} 
                                            {(--prefix) (Lit_Other "=") (DQ ($ VSub_Name "$prefix"))}
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [5181 5193]
                                  )
                                }
                              spids: [5180]
                            )
                          ]
                          spids: [5180]
                        )
                        (C {(die)})
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(git)} {(push)} {(DQ ($ VSub_Name "$repository"))} 
                      {(DQ ($ VSub_Name "$localrev")) (Lit_Other ":") 
                        (DQ (refs/heads/) ($ VSub_Name "$refspec"))
                      }
                    )
                  ]
                  spids: [-1 5154]
                )
              ]
              else_action: [
                (C {(die)} 
                  {(DQ ("'") ($ VSub_Name "$dir") ("' must already exist. Try 'git subtree add'."))}
                )
              ]
              spids: [5218 5230]
            )
          ]
          spids: [5109]
        )
      spids: [5104 5108]
    )
    (C {(DQ (cmd_) ($ VSub_Name "$command"))} {(DQ ($ VSub_At "$@"))})
  ]
)