(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GRAFTS_FILE)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name GIT_DIR>
                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{<.git>})
                ) <'/info/grafts'>
              )
            }
          spids: [11]
        )
      ]
    )
    (C {<.>} 
      {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<git>} {<--exec-path>})) 
        <'/git-sh-setup'>
      }
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$GRAFTS_FILE'))})
        (C {<die>} {(DQ <'Could not find graft file: \''> ($ Id.VSub_DollarName '$GRAFTS_FILE') <'\''>)})
      ]
    )
    (command.Pipeline
      children: [
        (C {<grep>} {(SQ <'^[^# ]'>)} {(DQ ($ Id.VSub_DollarName '$GRAFTS_FILE'))})
        (command.WhileUntil
          keyword: <Id.KW_While while>
          cond: (condition.Shell commands:[(C {<read>} {<definition>})])
          body: 
            (command.DoGroup
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [(C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$definition'))})]
                        )
                      action: [
                        (C {<echo>} {(DQ <'Converting: '> ($ Id.VSub_DollarName '$definition'))})
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {<git>} {<replace>} {<--graft>} {($ Id.VSub_DollarName '$definition')})
                            (C {<die>} 
                              {(DQ <'Conversion failed for: '> ($ Id.VSub_DollarName '$definition'))}
                            )
                          ]
                        )
                      ]
                      spids: [72 83]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<mv>} {(DQ ($ Id.VSub_DollarName '$GRAFTS_FILE'))} 
          {(DQ ($ Id.VSub_DollarName '$GRAFTS_FILE') <.bak>)}
        )
        (C {<die>} 
          {
            (DQ <'Could not rename \''> ($ Id.VSub_DollarName '$GRAFTS_FILE') <'\' to \''> 
              ($ Id.VSub_DollarName '$GRAFTS_FILE') <'.bak\''>
            )
          }
        )
      ]
    )
    (C {<echo>} {(DQ <'Success!'>)})
    (C {<echo>} 
      {
        (DQ <'All the grafts in \''> ($ Id.VSub_DollarName '$GRAFTS_FILE') 
          <'\' have been converted to replace refs!'>
        )
      }
    )
    (C {<echo>} 
      {
        (DQ <'The grafts file \''> ($ Id.VSub_DollarName '$GRAFTS_FILE') <'\' has been renamed: \''> 
          ($ Id.VSub_DollarName '$GRAFTS_FILE') <'.bak\''>
        )
      }
    )
  ]
)