(CommandList
  children: [
    (If
      arms: [
        (if_arm
          cond: [(C {(test)} {($ VSub_Pound '$#')} {(-eq)} {(0)})]
          action: [(C {(set)} {(--)} {(-h)})]
          spids: [16777215 28]
        )
      ]
      spids: [16777215 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
                    ops: [Op_DPipe]
                    children: [
                      (Pipeline
                        children: [
                          (C {(echo)} {(DQ ($ VSub_Name '$OPTS_SPEC'))})
                          (C {(git)} {(rev-parse)} {(--parseopt)} {(--)} {(DQ ($ VSub_At '$@'))})
                        ]
                        negated: F
                      )
                      (C {(echo)} {(ControlFlow_Exit exit)} {($ VSub_QMark '$?')})
                    ]
                  )
                ]
              )
            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:{(EmptyPart)} spids:[116])]
      spids: [116]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:branch) op:Equal rhs:{(EmptyPart)} spids:[118])]
      spids: [118]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:debug) op:Equal rhs:{(EmptyPart)} spids:[120])]
      spids: [120]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:command) op:Equal rhs:{(EmptyPart)} spids:[122])]
      spids: [122]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:onto) op:Equal rhs:{(EmptyPart)} spids:[124])]
      spids: [124]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:rejoin) op:Equal rhs:{(EmptyPart)} spids:[126])]
      spids: [126]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ignore_joins) op:Equal rhs:{(EmptyPart)} spids:[128])]
      spids: [128]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:annotate) op:Equal rhs:{(EmptyPart)} spids:[130])]
      spids: [130]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:squash) op:Equal rhs:{(EmptyPart)} spids:[132])]
      spids: [132]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:message) op:Equal rhs:{(EmptyPart)} spids:[134])]
      spids: [134]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:prefix) op:Equal rhs:{(EmptyPart)} 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') (Lit_Other '\\') (n))} {(DQ ($ VSub_Star '$*'))}]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                  ]
                  spids: [16777215 158]
                )
              ]
              spids: [16777215 177]
            )
          ]
          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') (Lit_Other '\\') (n))} {(DQ ($ VSub_Star '$*'))}]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                  ]
                  spids: [16777215 201]
                )
              ]
              spids: [16777215 220]
            )
          ]
          spids: [187]
        )
      spids: [182 186]
    )
    (FuncDef
      name: progress
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$quiet'))})]
                  action: [
                    (SimpleCommand
                      words: [{(printf)} {(DQ ('%s') (Lit_Other '\\') (r))} {(DQ ($ VSub_Star '$*'))}]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                  ]
                  spids: [16777215 244]
                )
              ]
              spids: [16777215 263]
            )
          ]
          spids: [230]
        )
      spids: [225 229]
    )
    (FuncDef
      name: assert
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(Pipeline children:[(C {(DQ ($ VSub_At '$@'))})] negated:T)]
                  action: [(C {(die)} {(DQ ('assertion failed: '))} {(DQ ($ VSub_At '$@'))})]
                  spids: [16777215 285]
                )
              ]
              spids: [16777215 299]
            )
          ]
          spids: [273]
        )
      spids: [268 272]
    )
    (WhileUntil
      keyword: <KW_While 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: [318]
                )
              ]
              spids: [318]
            )
            (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:[341])]
                      spids: [341]
                    )
                  ]
                  spids: [337 338 345 16777215]
                )
                (case_arm
                  pat_list: [{(-d)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:debug) op:Equal rhs:{(1)} spids:[352])]
                      spids: [352]
                    )
                  ]
                  spids: [348 349 356 16777215]
                )
                (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: [363]
                        )
                      ]
                      spids: [363]
                    )
                    (C {(shift)})
                  ]
                  spids: [359 360 372 16777215]
                )
                (case_arm
                  pat_list: [{(--no-annotate)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:annotate)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [379]
                        )
                      ]
                      spids: [379]
                    )
                  ]
                  spids: [375 376 382 16777215]
                )
                (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: [389]
                        )
                      ]
                      spids: [389]
                    )
                    (C {(shift)})
                  ]
                  spids: [385 386 398 16777215]
                )
                (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: [407 411]
                                )
                              )
                            }
                          spids: [405]
                        )
                      ]
                      spids: [405]
                    )
                    (C {(shift)})
                  ]
                  spids: [401 402 418 16777215]
                )
                (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: [425]
                        )
                      ]
                      spids: [425]
                    )
                    (C {(shift)})
                  ]
                  spids: [421 422 434 16777215]
                )
                (case_arm
                  pat_list: [{(--no-prefix)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prefix)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [441]
                        )
                      ]
                      spids: [441]
                    )
                  ]
                  spids: [437 438 444 16777215]
                )
                (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: [451]
                        )
                      ]
                      spids: [451]
                    )
                    (C {(shift)})
                  ]
                  spids: [447 448 460 16777215]
                )
                (case_arm
                  pat_list: [{(--no-onto)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:onto)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [467]
                        )
                      ]
                      spids: [467]
                    )
                  ]
                  spids: [463 464 470 16777215]
                )
                (case_arm
                  pat_list: [{(--rejoin)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:rejoin) op:Equal rhs:{(1)} spids:[477])]
                      spids: [477]
                    )
                  ]
                  spids: [473 474 481 16777215]
                )
                (case_arm
                  pat_list: [{(--no-rejoin)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:rejoin)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [488]
                        )
                      ]
                      spids: [488]
                    )
                  ]
                  spids: [484 485 491 16777215]
                )
                (case_arm
                  pat_list: [{(--ignore-joins)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ignore_joins)
                          op: Equal
                          rhs: {(1)}
                          spids: [498]
                        )
                      ]
                      spids: [498]
                    )
                  ]
                  spids: [494 495 502 16777215]
                )
                (case_arm
                  pat_list: [{(--no-ignore-joins)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ignore_joins)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [509]
                        )
                      ]
                      spids: [509]
                    )
                  ]
                  spids: [505 506 512 16777215]
                )
                (case_arm
                  pat_list: [{(--squash)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:squash) op:Equal rhs:{(1)} spids:[519])]
                      spids: [519]
                    )
                  ]
                  spids: [515 516 523 16777215]
                )
                (case_arm
                  pat_list: [{(--no-squash)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:squash)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [530]
                        )
                      ]
                      spids: [530]
                    )
                  ]
                  spids: [526 527 533 16777215]
                )
                (case_arm
                  pat_list: [{(--)}]
                  action: [(ControlFlow token:<ControlFlow_Break break>)]
                  spids: [536 537 543 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(C {(die)} {(DQ ('Unexpected option: ') ($ VSub_Name '$opt'))})]
                  spids: [546 547 558 16777215]
                )
              ]
              spids: [328 334 561]
            )
          ]
          spids: [315 563]
        )
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:command)
          op: Equal
          rhs: {(DQ ($ VSub_Number '$1'))}
          spids: [566]
        )
      ]
      spids: [566]
    )
    (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:{(EmptyPart)} spids:[590])]
              spids: [590]
            )
          ]
          spids: [582 587 593 16777215]
        )
        (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: [601]
                )
              ]
              spids: [601]
            )
          ]
          spids: [595 598 607 16777215]
        )
        (case_arm
          pat_list: [{(Lit_Other '*')}]
          action: [(C {(die)} {(DQ ("Unknown command '") ($ VSub_Name '$command') ("'"))})]
          spids: [609 610 622 16777215]
        )
      ]
      spids: [574 580 624]
    )
    (If
      arms: [
        (if_arm
          cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$prefix'))})]
          action: [(C {(die)} {(DQ ('You must provide the --prefix option.'))})]
          spids: [16777215 637]
        )
      ]
      spids: [16777215 646]
    )
    (Case
      to_match: {(DQ ($ VSub_Name '$command'))}
      arms: [
        (case_arm
          pat_list: [{(add)}]
          action: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {(-e)} {(DQ ($ VSub_Name '$prefix'))})
                (C {(die)} {(DQ ("prefix '") ($ VSub_Name '$prefix') ("' already exists."))})
              ]
            )
          ]
          spids: [657 658 681 16777215]
        )
        (case_arm
          pat_list: [{(Lit_Other '*')}]
          action: [
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(test)} {(-e)} {(DQ ($ VSub_Name '$prefix'))})
                (C {(die)} 
                  {(DQ ("'") ($ VSub_Name '$prefix') ("' does not exist; use 'git subtree add'"))}
                )
              ]
            )
          ]
          spids: [683 684 707 16777215]
        )
      ]
      spids: [649 655 709]
    )
    (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: [714 721]
                )
              )
            }
          spids: [712]
        )
      ]
      spids: [712]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(test)} {(DQ ($ VSub_Name '$command'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (pull))})
                (C {(test)} {(DQ ($ VSub_Name '$command'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (add))})
                (C {(test)} {(DQ ($ VSub_Name '$command'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (push))})
              ]
            )
          ]
          action: [
            (AndOr
              ops: [Op_DPipe]
              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: [776 788]
                          )
                        }
                      spids: [775]
                    )
                  ]
                  spids: [775]
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              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: [798 810]
                          )
                        }
                      spids: [797]
                    )
                  ]
                  spids: [797]
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$dirs'))})]
                  action: [(C {(die)} {(DQ ('Error: Use --prefix instead of bare filenames.'))})]
                  spids: [16777215 830]
                )
              ]
              spids: [16777215 840]
            )
          ]
          spids: [16777215 772]
        )
      ]
      spids: [16777215 842]
    )
    (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: [896]
                )
              ]
              spids: [896]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(rm)} {(-rf)} {(DQ ($ VSub_Name '$cachedir'))})
                (C {(die)} {(DQ ("Can't delete old cachedir: ") ($ VSub_Name '$cachedir'))})
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$cachedir'))})
                (C {(die)} {(DQ ("Can't create new cachedir: ") ($ VSub_Name '$cachedir'))})
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$cachedir') (/notree))})
                (C {(die)} {(DQ ("Can't create new cachedir: ") ($ VSub_Name '$cachedir') (/notree))})
              ]
            )
            (SimpleCommand
              words: [{(debug)} {(DQ ('Using cachedir: ') ($ VSub_Name '$cachedir'))}]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
          ]
          spids: [893]
        )
      spids: [888 892]
    )
    (FuncDef
      name: cache_get
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: oldrev
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: F
              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: <Redir_Less '<'>
                                  fd: 16777215
                                  arg_word: 
                                    {(DQ ($ VSub_Name '$cachedir') (/) ($ VSub_Name '$oldrev'))}
                                )
                              ]
                            )
                            (C {(echo)} {($ VSub_Name '$newrev')})
                          ]
                          spids: [16777215 1011]
                        )
                      ]
                      spids: [16777215 1031]
                    )
                  ]
                  spids: [995 1034]
                )
              spids: [989 16777215]
            )
          ]
          spids: [981]
        )
      spids: [976 980]
    )
    (FuncDef
      name: cache_miss
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: oldrev
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Pipeline
                              children: [
                                (C {(test)} {(-r)} 
                                  {(DQ ($ VSub_Name '$cachedir') (/) ($ VSub_Name '$oldrev'))}
                                )
                              ]
                              negated: T
                            )
                          ]
                          action: [(C {(echo)} {($ VSub_Name '$oldrev')})]
                          spids: [16777215 1076]
                        )
                      ]
                      spids: [16777215 1084]
                    )
                  ]
                  spids: [1058 1087]
                )
              spids: [1052 16777215]
            )
          ]
          spids: [1044]
        )
      spids: [1039 1043]
    )
    (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: [1101 1107]
                      )
                    }
                  spids: [1100]
                )
              ]
              spids: [1100]
            )
            (ForEach
              iter_name: miss
              iter_words: [{($ VSub_Name '$missed')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Pipeline
                              children: [
                                (C {(test)} {(-r)} 
                                  {(DQ ($ VSub_Name '$cachedir') (/notree/) ($ VSub_Name '$miss'))}
                                )
                              ]
                              negated: T
                            )
                          ]
                          action: [(C {(debug)} {(DQ ('  incorrect order: ') ($ VSub_Name '$miss'))})]
                          spids: [16777215 1137]
                        )
                      ]
                      spids: [16777215 1148]
                    )
                  ]
                  spids: [1119 1151]
                )
              spids: [1115 16777215]
            )
          ]
          spids: [1097]
        )
      spids: [1092 1096]
    )
    (FuncDef
      name: set_notree
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ (1))}]
              redirects: [
                (Redir
                  op: <Redir_Great '>'>
                  fd: 16777215
                  arg_word: {(DQ ($ VSub_Name '$cachedir') (/notree/) ($ VSub_Number '$1'))}
                )
              ]
            )
          ]
          spids: [1161]
        )
      spids: [1156 1160]
    )
    (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: [1189]
                )
              ]
              spids: [1189]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newrev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [1195]
                )
              ]
              spids: [1195]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      ops: [Op_DAmp Op_DAmp]
                      children: [
                        (C {(test)} {(DQ ($ VSub_Name '$oldrev'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (latest_old))}
                        )
                        (C {(test)} {(DQ ($ VSub_Name '$oldrev'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (latest_new))}
                        )
                        (C {(test)} {(-e)} {(DQ ($ VSub_Name '$cachedir') (/) ($ VSub_Name '$oldrev'))})
                      ]
                    )
                  ]
                  action: [
                    (C {(die)} {(DQ ('cache for ') ($ VSub_Name '$oldrev') (' already exists!'))})
                  ]
                  spids: [16777215 1246]
                )
              ]
              spids: [16777215 1258]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_Name '$newrev'))}]
              redirects: [
                (Redir
                  op: <Redir_Great '>'>
                  fd: 16777215
                  arg_word: {(DQ ($ VSub_Name '$cachedir') (/) ($ VSub_Name '$oldrev'))}
                )
              ]
            )
          ]
          spids: [1186]
        )
      spids: [1181 1185]
    )
    (FuncDef
      name: rev_exists
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (SimpleCommand
                      words: [{(git)} {(rev-parse)} {(DQ ($ VSub_Number '$1'))}]
                      redirects: [
                        (Redir
                          op: <Redir_Great '>'>
                          fd: 16777215
                          arg_word: {(/dev/null)}
                        )
                        (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})
                      ]
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 1302]
                )
              ]
              else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
              spids: [1310 1318]
            )
          ]
          spids: [1282]
        )
      spids: [1277 1281]
    )
    (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: [1331]
                )
              ]
              spids: [1331]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:branch)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [1337]
                )
              ]
              spids: [1337]
            )
            (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: [1344 1352]
                      )
                    }
                  spids: [1343]
                )
              ]
              spids: [1343]
            )
            (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: [1356 1371]
                      )
                    }
                  spids: [1355]
                )
              ]
              spids: [1355]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$match'))})]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 1386]
                )
              ]
              else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
              spids: [1394 1402]
            )
          ]
          spids: [1328]
        )
      spids: [1323 1327]
    )
    (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: [16777215 1434]
                )
              ]
              spids: [16777215 1446]
            )
          ]
          spids: [1421]
        )
      spids: [1416 1420]
    )
    (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: [1468]
                )
              ]
              spids: [1468]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:sq) op:Equal rhs:{(EmptyPart)} spids:[1474])]
              spids: [1474]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:main) op:Equal rhs:{(EmptyPart)} spids:[1477])]
              spids: [1477]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:sub) op:Equal rhs:{(EmptyPart)} spids:[1480])]
              spids: [1480]
            )
            (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)}
                )
                (WhileUntil
                  keyword: <KW_While 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: [1562]
                                    )
                                  ]
                                  spids: [1562]
                                )
                              ]
                              spids: [1558 1559 1568 16777215]
                            )
                            (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: [1576]
                                    )
                                  ]
                                  spids: [1576]
                                )
                              ]
                              spids: [1571 1573 1582 16777215]
                            )
                            (case_arm
                              pat_list: [{(git-subtree-split) (Lit_Other ':')}]
                              action: [
                                (AndOr
                                  ops: [Op_DPipe]
                                  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: [1592 1601]
                                                )
                                              )
                                            }
                                          spids: [1590]
                                        )
                                      ]
                                      spids: [1590]
                                    )
                                    (C {(die)} 
                                      {
                                        (DQ ('could not rev-parse split hash ') ($ VSub_Name '$b') 
                                          (' from commit ') ($ VSub_Name '$sq')
                                        )
                                      }
                                    )
                                  ]
                                )
                              ]
                              spids: [1585 1587 1617 16777215]
                            )
                            (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: [1660]
                                                    )
                                                  ]
                                                  spids: [1660]
                                                )
                                              ]
                                              spids: [16777215 1649]
                                            )
                                          ]
                                          spids: [16777215 1666]
                                        )
                                        (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: [16777215 1635]
                                    )
                                  ]
                                  spids: [16777215 1693]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sq)
                                      op: Equal
                                      rhs: {(EmptyPart)}
                                      spids: [1696]
                                    )
                                  ]
                                  spids: [1696]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:main)
                                      op: Equal
                                      rhs: {(EmptyPart)}
                                      spids: [1699]
                                    )
                                  ]
                                  spids: [1699]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sub)
                                      op: Equal
                                      rhs: {(EmptyPart)}
                                      spids: [1702]
                                    )
                                  ]
                                  spids: [1702]
                                )
                              ]
                              spids: [1620 1621 1705 16777215]
                            )
                          ]
                          spids: [1549 1555 1708]
                        )
                      ]
                      spids: [1522 1711]
                    )
                )
              ]
              negated: F
            )
          ]
          spids: [1456]
        )
      spids: [1451 1455]
    )
    (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: [1731]
                )
              ]
              spids: [1731]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:revs)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [1737]
                )
              ]
              spids: [1737]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:main) op:Equal rhs:{(EmptyPart)} spids:[1743])]
              spids: [1743]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:sub) op:Equal rhs:{(EmptyPart)} spids:[1746])]
              spids: [1746]
            )
            (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')}
                )
                (WhileUntil
                  keyword: <KW_While 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: [1804]
                                    )
                                  ]
                                  spids: [1804]
                                )
                              ]
                              spids: [1800 1801 1810 16777215]
                            )
                            (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: [1818]
                                    )
                                  ]
                                  spids: [1818]
                                )
                              ]
                              spids: [1813 1815 1824 16777215]
                            )
                            (case_arm
                              pat_list: [{(git-subtree-split) (Lit_Other ':')}]
                              action: [
                                (AndOr
                                  ops: [Op_DPipe]
                                  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: [1834 1843]
                                                )
                                              )
                                            }
                                          spids: [1832]
                                        )
                                      ]
                                      spids: [1832]
                                    )
                                    (C {(die)} 
                                      {
                                        (DQ ('could not rev-parse split hash ') ($ VSub_Name '$b') 
                                          (' from commit ') ($ VSub_Name '$sq')
                                        )
                                      }
                                    )
                                  ]
                                )
                              ]
                              spids: [1827 1829 1859 16777215]
                            )
                            (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: [16777215 1894]
                                    )
                                  ]
                                  spids: [16777215 1922]
                                )
                                (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: [16777215 1944]
                                    )
                                  ]
                                  spids: [16777215 1985]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:main)
                                      op: Equal
                                      rhs: {(EmptyPart)}
                                      spids: [1988]
                                    )
                                  ]
                                  spids: [1988]
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sub)
                                      op: Equal
                                      rhs: {(EmptyPart)}
                                      spids: [1991]
                                    )
                                  ]
                                  spids: [1991]
                                )
                              ]
                              spids: [1862 1863 1994 16777215]
                            )
                          ]
                          spids: [1791 1797 1997]
                        )
                      ]
                      spids: [1788 2000]
                    )
                )
              ]
              negated: F
            )
          ]
          spids: [1721]
        )
      spids: [1716 1720]
    )
    (FuncDef
      name: copy_commit
      body: 
        (BraceGroup
          children: [
            (C {(debug)} {(copy_commit)} {(DQ ('{') ($ VSub_Number '$1') ('}'))} 
              {(DQ ('{') ($ VSub_Number '$2') ('}'))} {(DQ ('{') ($ VSub_Number '$3') ('}'))}
            )
            (AndOr
              ops: [Op_DPipe]
              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: [2123 2140]
                                )
                                (C {(git)} {(commit-tree)} {(DQ ($ VSub_Number '$2'))} 
                                  {($ VSub_Number '$3')}
                                )
                              ]
                              negated: F
                            )
                          ]
                        )
                      spids: [2065 2159]
                    )
                  ]
                  negated: F
                )
                (C {(die)} {(DQ ("Can't copy commit ") ($ VSub_Number '$1'))})
              ]
            )
          ]
          spids: [2010]
        )
      spids: [2005 2009]
    )
    (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: [2181]
                )
              ]
              spids: [2181]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_old)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [2187]
                )
              ]
              spids: [2187]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_new)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [2193]
                )
              ]
              spids: [2193]
            )
            (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: [2213]
                        )
                      ]
                      spids: [2213]
                    )
                  ]
                  spids: [16777215 2210]
                )
              ]
              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: [2222]
                    )
                  ]
                  spids: [2222]
                )
              ]
              spids: [2219 2232]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLessDash '<<-'>
                  fd: 16777215
                  here_begin: {(EOF)}
                  here_end_span_id: 2253
                  stdin_parts: [
                    ($ 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')
                  ]
                )
              ]
            )
          ]
          spids: [2178]
        )
      spids: [2173 2177]
    )
    (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: [16777215 2276]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ ("Merge commit '") ($ VSub_Number '$1') ("' as '") ($ VSub_Number '$2') ("'"))
                  }
                )
              ]
              spids: [2286 2300]
            )
          ]
          spids: [2262]
        )
      spids: [2257 2261]
    )
    (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: [2313]
                )
              ]
              spids: [2313]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_old)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [2319]
                )
              ]
              spids: [2319]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:latest_new)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [2325]
                )
              ]
              spids: [2325]
            )
            (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: [2345]
                        )
                      ]
                      spids: [2345]
                    )
                  ]
                  spids: [16777215 2342]
                )
              ]
              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: [2354]
                    )
                  ]
                  spids: [2354]
                )
              ]
              spids: [2351 2364]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLessDash '<<-'>
                  fd: 16777215
                  here_begin: {(EOF)}
                  here_end_span_id: 2385
                  stdin_parts: [
                    ($ 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')
                  ]
                )
              ]
            )
          ]
          spids: [2310]
        )
      spids: [2305 2309]
    )
    (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: [2397]
                )
              ]
              spids: [2397]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:oldsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [2403]
                )
              ]
              spids: [2403]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [2409]
                )
              ]
              spids: [2409]
            )
            (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: [2416 2426]
                      )
                    }
                  spids: [2415]
                )
              ]
              spids: [2415]
            )
            (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: [2445 2455]
                              )
                            }
                          spids: [2444]
                        )
                      ]
                      spids: [2444]
                    )
                    (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: [16777215 2441]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ ("Squashed '") ($ VSub_Name '$dir') ("/' content from commit ") 
                      ($ VSub_Name '$newsub_short')
                    )
                  }
                )
              ]
              spids: [2511 2524]
            )
            (C {(echo)})
            (C {(echo)} {(DQ ('git-subtree-dir: ') ($ VSub_Name '$dir'))})
            (C {(echo)} {(DQ ('git-subtree-split: ') ($ VSub_Name '$newsub'))})
          ]
          spids: [2394]
        )
      spids: [2389 2393]
    )
    (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: [2557]
                )
              ]
              spids: [2557]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(git)} {(log)} {(-1)} 
                  {(--pretty) (Lit_Other '=') (format) (Lit_Other ':') (SQ <'%T'>)} {(DQ ($ VSub_Name '$commit'))} {(--)}
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
          ]
          spids: [2554]
        )
      spids: [2549 2553]
    )
    (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: [2600]
                )
              ]
              spids: [2600]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [2606]
                )
              ]
              spids: [2606]
            )
            (Pipeline
              children: [
                (C {(git)} {(ls-tree)} {(DQ ($ VSub_Name '$commit'))} {(--)} {(DQ ($ VSub_Name '$dir'))})
                (WhileUntil
                  keyword: <KW_While 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
                          ops: [Op_DAmp]
                          children: [
                            (C {(test)} {(DQ ($ VSub_Name '$type'))} {(Lit_Other '=')} {(DQ (commit))})
                            (ControlFlow
                              token: <ControlFlow_Continue continue>
                            )
                          ]
                        )
                        (C {(echo)} {($ VSub_Name '$tree')})
                        (ControlFlow token:<ControlFlow_Break break>)
                      ]
                      spids: [2642 2715]
                    )
                )
              ]
              negated: F
            )
          ]
          spids: [2597]
        )
      spids: [2592 2596]
    )
    (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: [2728]
                )
              ]
              spids: [2728]
            )
            (C {(shift)})
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound '$#')} {(-ne)} {(1)})]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 2746]
                )
              ]
              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: [2761 2765]
                          )
                        }
                      spids: [2760]
                    )
                  ]
                  spids: [2760]
                )
                (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: [16777215 2784]
                    )
                  ]
                  else_action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                  spids: [2795 2806]
                )
              ]
              spids: [2757 2809]
            )
          ]
          spids: [2725]
        )
      spids: [2720 2724]
    )
    (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: [2822]
                )
              ]
              spids: [2822]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:oldsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [2828]
                )
              ]
              spids: [2828]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newsub)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [2834]
                )
              ]
              spids: [2834]
            )
            (AndOr
              ops: [Op_DPipe]
              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: [2841 2845]
                          )
                        }
                      spids: [2840]
                    )
                  ]
                  spids: [2840]
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$old'))})]
                  action: [
                    (AndOr
                      ops: [Op_DPipe]
                      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: F
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {($ VSub_QMark '$?')}
                        )
                      ]
                    )
                  ]
                  spids: [16777215 2865]
                )
              ]
              else_action: [
                (AndOr
                  ops: [Op_DPipe]
                  children: [
                    (Pipeline
                      children: [
                        (C {(squash_msg)} {(DQ ($ VSub_Name '$dir'))} {(DQ )} 
                          {(DQ ($ VSub_Name '$newsub'))}
                        )
                        (C {(git)} {(commit-tree)} {(DQ ($ VSub_Name '$tree'))})
                      ]
                      negated: F
                    )
                    (ControlFlow
                      token: <ControlFlow_Exit exit>
                      arg_word: {($ VSub_QMark '$?')}
                    )
                  ]
                )
              ]
              spids: [2906 2940]
            )
          ]
          spids: [2819]
        )
      spids: [2814 2818]
    )
    (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: [2953]
                )
              ]
              spids: [2953]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tree)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [2959]
                )
              ]
              spids: [2959]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:newparents)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [2965]
                )
              ]
              spids: [2965]
            )
            (C {(assert)} {(test)} {(-n)} {(DQ ($ VSub_Name '$tree'))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:identical)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [2983]
                )
              ]
              spids: [2983]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:nonidentical)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [2986]
                )
              ]
              spids: [2986]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:p) op:Equal rhs:{(EmptyPart)} spids:[2989])]
              spids: [2989]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:gotparents)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [2992]
                )
              ]
              spids: [2992]
            )
            (ForEach
              iter_name: parent
              iter_words: [{($ VSub_Name '$newparents')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      ops: [Op_DPipe]
                      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: [3008 3012]
                                  )
                                }
                              spids: [3007]
                            )
                          ]
                          spids: [3007]
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {($ VSub_QMark '$?')}
                        )
                      ]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-z)} {(DQ ($ VSub_Name '$ptree'))})
                        (ControlFlow token:<ControlFlow_Continue continue>)
                      ]
                    )
                    (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: [3056]
                                )
                              ]
                              spids: [3056]
                            )
                          ]
                          spids: [16777215 3049]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:nonidentical)
                              op: Equal
                              rhs: {(DQ ($ VSub_Name '$parent'))}
                              spids: [3065]
                            )
                          ]
                          spids: [3065]
                        )
                      ]
                      spids: [3062 3071]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:is_new) op:Equal rhs:{(1)} spids:[3083])]
                      spids: [3083]
                    )
                    (ForEach
                      iter_name: gp
                      iter_words: [{($ VSub_Name '$gotparents')}]
                      do_arg_iter: F
                      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: {(EmptyPart)}
                                          spids: [3117]
                                        )
                                      ]
                                      spids: [3117]
                                    )
                                    (ControlFlow
                                      token: <ControlFlow_Break break>
                                    )
                                  ]
                                  spids: [16777215 3114]
                                )
                              ]
                              spids: [16777215 3123]
                            )
                          ]
                          spids: [3096 3126]
                        )
                      spids: [3092 16777215]
                    )
                    (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: [3143]
                                )
                              ]
                              spids: [3143]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:p)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name '$p') (' -p ') ($ VSub_Name '$parent'))}
                                  spids: [3151]
                                )
                              ]
                              spids: [3151]
                            )
                          ]
                          spids: [16777215 3140]
                        )
                      ]
                      spids: [16777215 3159]
                    )
                  ]
                  spids: [3004 3162]
                )
              spids: [3000 16777215]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:copycommit)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [3166]
                )
              ]
              spids: [3166]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name '$identical'))})
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name '$nonidentical'))})
                      ]
                    )
                  ]
                  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: [3194 3204]
                              )
                            }
                          spids: [3193]
                        )
                      ]
                      spids: [3193]
                    )
                    (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: [3227]
                                )
                              ]
                              spids: [3227]
                            )
                          ]
                          spids: [16777215 3220]
                        )
                      ]
                      spids: [16777215 3231]
                    )
                  ]
                  spids: [16777215 3190]
                )
              ]
              spids: [16777215 3234]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name '$identical'))})
                        (C {(test)} {(-z)} {(DQ ($ VSub_Name '$copycommit'))})
                      ]
                    )
                  ]
                  action: [(C {(echo)} {($ VSub_Name '$identical')})]
                  spids: [16777215 3258]
                )
              ]
              else_action: [
                (AndOr
                  ops: [Op_DPipe]
                  children: [
                    (C {(copy_commit)} {(DQ ($ VSub_Name '$rev'))} {(DQ ($ VSub_Name '$tree'))} 
                      {(DQ ($ VSub_Name '$p'))}
                    )
                    (ControlFlow
                      token: <ControlFlow_Exit exit>
                      arg_word: {($ VSub_QMark '$?')}
                    )
                  ]
                )
              ]
              spids: [3266 3290]
            )
          ]
          spids: [2950]
        )
      spids: [2945 2949]
    )
    (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:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})]
                        )
                      ]
                      negated: T
                    )
                  ]
                  action: [(C {(die)} {(DQ ('Working tree has modifications.  Cannot add.'))})]
                  spids: [16777215 3321]
                )
              ]
              spids: [16777215 3331]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [{(git)} {(diff-index)} {(--cached)} {(HEAD)} {(--exit-code)} {(--quiet)}]
                          redirects: [(Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})]
                        )
                      ]
                      negated: T
                    )
                  ]
                  action: [(C {(die)} {(DQ ('Index has modifications.  Cannot add.'))})]
                  spids: [16777215 3354]
                )
              ]
              spids: [16777215 3364]
            )
          ]
          spids: [3300]
        )
      spids: [3295 3299]
    )
    (FuncDef
      name: ensure_valid_ref_format
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(git)} {(check-ref-format)} {(DQ (refs/heads/) ($ VSub_Number '$1'))})
                (C {(die)} {(DQ ("'") ($ VSub_Number '$1') ("' does not look like a ref"))})
              ]
            )
          ]
          spids: [3374]
        )
      spids: [3369 3373]
    )
    (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: [16777215 3419]
                )
              ]
              spids: [16777215 3431]
            )
            (C {(ensure_clean)})
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {($ VSub_Pound '$#')} {(-eq)} {(1)})]
                  action: [
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (SimpleCommand
                          words: [
                            {(git)}
                            {(rev-parse)}
                            {(-q)}
                            {(--verify)}
                            {(DQ ($ VSub_Number '$1') ('^{commit}'))}
                          ]
                          redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})]
                        )
                        (C {(die)} {(DQ ("'") ($ VSub_Number '$1') ("' does not refer to a commit"))})
                      ]
                    )
                    (C {(cmd_add_commit)} {(DQ ($ VSub_At '$@'))})
                  ]
                  spids: [16777215 3450]
                )
                (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: [3490 3501]
                )
              ]
              else_action: [
                (C {(say)} {(DQ ("error: parameters were '") ($ VSub_At '$@') ("'"))})
                (C {(die)} {(DQ ('Provide either a commit or a repository and commit.'))})
              ]
              spids: [3539 3558]
            )
          ]
          spids: [3405]
        )
      spids: [3400 3404]
    )
    (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: [3582]
                )
              ]
              spids: [3582]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:refspec)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [3586]
                )
              ]
              spids: [3586]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(git)} {(fetch)} {(DQ ($ VSub_At '$@'))})
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:revs) op:Equal rhs:{(FETCH_HEAD)} spids:[3605])]
              spids: [3605]
            )
            (C {(set)} {(--)} {($ VSub_Name '$revs')})
            (C {(cmd_add_commit)} {(DQ ($ VSub_At '$@'))})
          ]
          spids: [3568]
        )
      spids: [3563 3567]
    )
    (FuncDef
      name: cmd_add_commit
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              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: [3634 3646]
                          )
                        }
                      spids: [3633]
                    )
                  ]
                  spids: [3633]
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (C {(set)} {(--)} {($ VSub_Name '$revs')})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [3662]
                )
              ]
              spids: [3662]
            )
            (C {(debug)} {(DQ ('Adding ') ($ VSub_Name '$dir') (" as '") ($ VSub_Name '$rev') ("'..."))})
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(git)} {(read-tree)} {(--prefix) (Lit_Other '=') (DQ ($ VSub_Name '$dir'))} 
                  {($ VSub_Name '$rev')}
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(git)} {(checkout)} {(--)} {(DQ ($ VSub_Name '$dir'))})
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              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: [3717 3721]
                          )
                        }
                      spids: [3716]
                    )
                  ]
                  spids: [3716]
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              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: [3732 3738]
                          )
                        }
                      spids: [3731]
                    )
                  ]
                  spids: [3731]
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name '$headrev'))})
                        (C {(test)} {(DQ ($ VSub_Name '$headrev'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ ($ VSub_Name '$rev'))}
                        )
                      ]
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:headp)
                          op: Equal
                          rhs: {(DQ ('-p ') ($ VSub_Name '$headrev'))}
                          spids: [3776]
                        )
                      ]
                      spids: [3776]
                    )
                  ]
                  spids: [16777215 3773]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:headp)
                      op: Equal
                      rhs: {(EmptyPart)}
                      spids: [3786]
                    )
                  ]
                  spids: [3786]
                )
              ]
              spids: [3783 3789]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$squash'))})]
                  action: [
                    (AndOr
                      ops: [Op_DPipe]
                      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: [3808 3820]
                                  )
                                }
                              spids: [3807]
                            )
                          ]
                          spids: [3807]
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {($ VSub_QMark '$?')}
                        )
                      ]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      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: F
                                          )
                                        ]
                                      )
                                    left_token: <Left_CommandSub '$('>
                                    spids: [3830 3859]
                                  )
                                }
                              spids: [3829]
                            )
                          ]
                          spids: [3829]
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {($ VSub_QMark '$?')}
                        )
                      ]
                    )
                  ]
                  spids: [16777215 3804]
                )
              ]
              else_action: [
                (AndOr
                  ops: [Op_DAmp Op_DPipe]
                  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: [3872 3878]
                              )
                            }
                          spids: [3871]
                        )
                      ]
                      spids: [3871]
                    )
                    (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: F
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [3884 3915]
                              )
                            }
                          spids: [3883]
                        )
                      ]
                      spids: [3883]
                    )
                    (ControlFlow
                      token: <ControlFlow_Exit exit>
                      arg_word: {($ VSub_QMark '$?')}
                    )
                  ]
                )
              ]
              spids: [3868 3924]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(git)} {(reset)} {(DQ ($ VSub_Name '$commit'))})
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (C {(say)} {(DQ ("Added dir '") ($ VSub_Name '$dir') ("'"))})
          ]
          spids: [3630]
        )
      spids: [3625 3629]
    )
    (FuncDef
      name: cmd_split
      body: 
        (BraceGroup
          children: [
            (C {(debug)} {(DQ ('Splitting ') ($ VSub_Name '$dir') (...))})
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(cache_setup)})
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (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')})
                        (WhileUntil
                          keyword: <KW_While 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: [4020 4050]
                            )
                        )
                      ]
                      negated: F
                    )
                  ]
                  spids: [16777215 3992]
                )
              ]
              spids: [16777215 4053]
            )
            (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: {(EmptyPart)}
                          spids: [4071]
                        )
                      ]
                      spids: [4071]
                    )
                  ]
                  spids: [16777215 4068]
                )
              ]
              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: [4079 4089]
                            )
                          )
                        }
                      spids: [4077]
                    )
                  ]
                  spids: [4077]
                )
              ]
              spids: [4074 4093]
            )
            (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: [4109]
                )
              ]
              spids: [4109]
            )
            (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: F
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [4116 4128]
                      )
                    }
                  spids: [4115]
                )
              ]
              spids: [4115]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:revcount) op:Equal rhs:{(0)} spids:[4131])]
              spids: [4131]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:createcount) op:Equal rhs:{(0)} spids:[4135])]
              spids: [4135]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (Pipeline
                  children: [
                    (C {(eval)} {(DQ ($ VSub_Name '$grl'))})
                    (WhileUntil
                      keyword: <KW_While 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: [4161 4168]
                                      )
                                    }
                                  spids: [4160]
                                )
                              ]
                              spids: [4160]
                            )
                            (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: [4192 4198]
                                      )
                                    }
                                  spids: [4191]
                                )
                              ]
                              spids: [4191]
                            )
                            (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: [16777215 4212]
                                )
                              ]
                              spids: [16777215 4226]
                            )
                            (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: [4230 4237]
                                      )
                                    }
                                  spids: [4229]
                                )
                              ]
                              spids: [4229]
                            )
                            (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: [4249 4253]
                                      )
                                    }
                                  spids: [4248]
                                )
                              ]
                              spids: [4248]
                            )
                            (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: [4266 4276]
                                      )
                                    }
                                  spids: [4265]
                                )
                              ]
                              spids: [4265]
                            )
                            (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: [16777215 4334]
                                        )
                                      ]
                                      spids: [16777215 4348]
                                    )
                                    (ControlFlow
                                      token: <ControlFlow_Continue continue>
                                    )
                                  ]
                                  spids: [16777215 4313]
                                )
                              ]
                              spids: [16777215 4354]
                            )
                            (AndOr
                              ops: [Op_DPipe]
                              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: [4359 4373]
                                          )
                                        }
                                      spids: [4358]
                                    )
                                  ]
                                  spids: [4358]
                                )
                                (ControlFlow
                                  token: <ControlFlow_Exit exit>
                                  arg_word: {($ VSub_QMark '$?')}
                                )
                              ]
                            )
                            (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: [4157 4419]
                        )
                    )
                  ]
                  negated: F
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (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: [4430 4434]
                      )
                    }
                  spids: [4429]
                )
              ]
              spids: [4429]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$latest_new'))})]
                  action: [(C {(die)} {(DQ ('No new revisions were found'))})]
                  spids: [16777215 4448]
                )
              ]
              spids: [16777215 4458]
            )
            (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: [4484 4488]
                              )
                            }
                          spids: [4483]
                        )
                      ]
                      spids: [4483]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      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: [4508 4522]
                                )
                              )
                            }
                            {(DQ ($ VSub_Name '$latest_new'))}
                          ]
                          redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {($ VSub_QMark '$?')}
                        )
                      ]
                    )
                  ]
                  spids: [16777215 4473]
                )
              ]
              spids: [16777215 4541]
            )
            (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: T
                                    )
                                  ]
                                  action: [
                                    (C {(die)} 
                                      {
                                        (DQ ("Branch '") ($ VSub_Name '$branch') 
                                          ("' is not an ancestor of commit '") ($ VSub_Name '$latest_new') ("'.")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [16777215 4586]
                                )
                              ]
                              spids: [16777215 4600]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:action)
                                  op: Equal
                                  rhs: {(SQ <Updated>)}
                                  spids: [4603]
                                )
                              ]
                              spids: [4603]
                            )
                          ]
                          spids: [16777215 4568]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:action)
                              op: Equal
                              rhs: {(SQ <Created>)}
                              spids: [4612]
                            )
                          ]
                          spids: [4612]
                        )
                      ]
                      spids: [4609 4618]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(git)} {(update-ref)} {(-m)} {(SQ <'subtree split'>)} 
                          {(DQ (refs/heads/) ($ VSub_Name '$branch'))} {(DQ ($ VSub_Name '$latest_new'))}
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {($ VSub_QMark '$?')}
                        )
                      ]
                    )
                    (C {(say)} 
                      {(DQ ($ VSub_Name '$action') (" branch '") ($ VSub_Name '$branch') ("'"))}
                    )
                  ]
                  spids: [16777215 4555]
                )
              ]
              spids: [16777215 4659]
            )
            (C {(echo)} {(DQ ($ VSub_Name '$latest_new'))})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)})
          ]
          spids: [3959]
        )
      spids: [3954 3958]
    )
    (FuncDef
      name: cmd_merge
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              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: [4685 4697]
                          )
                        }
                      spids: [4684]
                    )
                  ]
                  spids: [4684]
                )
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (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: [16777215 4728]
                )
              ]
              spids: [16777215 4740]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rev)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [4743]
                )
              ]
              spids: [4743]
            )
            (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: [4766 4772]
                                )
                              )
                            }
                          spids: [4764]
                        )
                      ]
                      spids: [4764]
                    )
                    (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: [16777215 4787]
                        )
                      ]
                      spids: [16777215 4799]
                    )
                    (C {(set)} {($ VSub_Name '$first_split')})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:old)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [4807]
                        )
                      ]
                      spids: [4807]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:sub)
                          op: Equal
                          rhs: {($ VSub_Number '$2')}
                          spids: [4811]
                        )
                      ]
                      spids: [4811]
                    )
                    (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') (.))})
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(0)}
                            )
                          ]
                          spids: [16777215 4830]
                        )
                      ]
                      spids: [16777215 4847]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      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: [4851 4865]
                                  )
                                }
                              spids: [4850]
                            )
                          ]
                          spids: [4850]
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {($ VSub_QMark '$?')}
                        )
                      ]
                    )
                    (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: [4882]
                        )
                      ]
                      spids: [4882]
                    )
                  ]
                  spids: [16777215 4761]
                )
              ]
              spids: [16777215 4888]
            )
            (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: [4893 4897]
                      )
                    }
                  spids: [4892]
                )
              ]
              spids: [4892]
            )
            (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: [16777215 4929]
                        )
                      ]
                      else_action: [(C {(git)} {(merge)} {(-s)} {(subtree)} {(DQ ($ VSub_Name '$rev'))})]
                      spids: [4951 4967]
                    )
                  ]
                  spids: [16777215 4915]
                )
              ]
              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: [16777215 4984]
                    )
                  ]
                  else_action: [
                    (C {(git)} {(merge)} {(-Xsubtree) (Lit_Other '=') (DQ ($ VSub_Name '$prefix'))} 
                      {($ VSub_Name '$rev')}
                    )
                  ]
                  spids: [5010 5026]
                )
              ]
              spids: [4970 5029]
            )
          ]
          spids: [4681]
        )
      spids: [4676 4680]
    )
    (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: [16777215 5053]
                )
              ]
              spids: [16777215 5063]
            )
            (C {(ensure_clean)})
            (C {(ensure_valid_ref_format)} {(DQ ($ VSub_Number '$2'))})
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(git)} {(fetch)} {(DQ ($ VSub_At '$@'))})
                (ControlFlow
                  token: <ControlFlow_Exit exit>
                  arg_word: {($ VSub_QMark '$?')}
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:revs) op:Equal rhs:{(FETCH_HEAD)} spids:[5091])]
              spids: [5091]
            )
            (C {(set)} {(--)} {($ VSub_Name '$revs')})
            (C {(cmd_merge)} {(DQ ($ VSub_At '$@'))})
          ]
          spids: [5039]
        )
      spids: [5034 5038]
    )
    (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: [16777215 5130]
                )
              ]
              spids: [16777215 5140]
            )
            (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: [5164]
                        )
                      ]
                      spids: [5164]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:refspec)
                          op: Equal
                          rhs: {($ VSub_Number '$2')}
                          spids: [5168]
                        )
                      ]
                      spids: [5168]
                    )
                    (C {(echo)} {(DQ ('git push using: '))} {(DQ ($ VSub_Name '$repository'))} 
                      {(DQ ($ VSub_Name '$refspec'))}
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      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: [5188 5200]
                                  )
                                }
                              spids: [5187]
                            )
                          ]
                          spids: [5187]
                        )
                        (C {(die)})
                      ]
                    )
                    (C {(git)} {(push)} {(DQ ($ VSub_Name '$repository'))} 
                      {(DQ ($ VSub_Name '$localrev')) (Lit_Other ':') 
                        (DQ (refs/heads/) ($ VSub_Name '$refspec'))
                      }
                    )
                  ]
                  spids: [16777215 5161]
                )
              ]
              else_action: [
                (C {(die)} 
                  {(DQ ("'") ($ VSub_Name '$dir') ("' must already exist. Try 'git subtree add'."))}
                )
              ]
              spids: [5225 5237]
            )
          ]
          spids: [5116]
        )
      spids: [5111 5115]
    )
    (C {(DQ (cmd_) ($ VSub_Name '$command'))} {(DQ ($ VSub_At '$@'))})
  ]
)