(command.CommandList
  children: [
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<nounset>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<pipefail>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<errexit>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <log>
      name: log
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_At '@'))}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <versioned-dest>
      name: versioned-dest
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'branch='> 
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        blame_tok: <git>
                        more_env: []
                        words: [{<git>} {<rev-parse>} {<--abbrev-ref>} {<HEAD>}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [{<log>} {(DQ <'branch '> ($ Id.VSub_DollarName branch))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'hash='> 
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        blame_tok: <git>
                        more_env: []
                        words: [{<git>} {<rev-parse>} {($ Id.VSub_DollarName branch)}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'short_hash='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name hash>
                    var_name: hash
                    suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 0>} length:{<Id.Lit_Digits 8>})
                    right: <Id.Arith_RBrace _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [{<log>} {(DQ <'hash '> ($ Id.VSub_DollarName short_hash))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'dest='> 
                  (DQ <'oilshell.org/git-branch/'> ($ Id.VSub_DollarName branch) <'/'> 
                    ($ Id.VSub_DollarName short_hash)
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {($ Id.VSub_DollarName dest)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <spec>
      name: spec
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'user='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'host='> ($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<dest>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dest='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dest='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <versioned-dest>
                              more_env: []
                              words: [{<versioned-dest>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'/'> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <hostname>
                              more_env: []
                              words: [{<hostname>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'/spec'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <ssh>
              more_env: []
              words: [
                {<ssh>}
                {($ Id.VSub_DollarName user) <Id.Lit_At '@'> ($ Id.VSub_DollarName host)}
                {<mkdir>}
                {<-p>}
                {($ Id.VSub_DollarName dest)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rsync>
              more_env: []
              words: [
                {<rsync>}
                {<--archive>}
                {<--verbose>}
                {<--copy-links>}
                {<'_tmp/spec/'>}
                {($ Id.VSub_DollarName user) <Id.Lit_At '@'> ($ Id.VSub_DollarName host) 
                  <Id.Lit_Colon ':'> ($ Id.VSub_DollarName dest) <'/'>
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Visit http://'> ($ Id.VSub_DollarName dest) <'/RESULTS.html'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <unit>
      name: unit
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(SQ <'Hello from publish.sh'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <wild>
      name: wild
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'user='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'host='> ($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<dest>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dest='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dest='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <versioned-dest>
                              more_env: []
                              words: [{<versioned-dest>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <ssh>
              more_env: []
              words: [
                {<ssh>}
                {($ Id.VSub_DollarName user) <Id.Lit_At '@'> ($ Id.VSub_DollarName host)}
                {<mkdir>}
                {<-p>}
                {($ Id.VSub_DollarName dest)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rsync>
              more_env: []
              words: [
                {<rsync>}
                {<--archive>}
                {<--verbose>}
                {<'_release/VERSION/test/wild.wwz'>}
                {($ Id.VSub_DollarName user) <Id.Lit_At '@'> ($ Id.VSub_DollarName host) 
                  <Id.Lit_Colon ':'> ($ Id.VSub_DollarName dest) <'/'>
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Visit http://'> ($ Id.VSub_DollarName dest) <'/wild.wwz/'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <Id.Left_DoubleQuote '"'>
      more_env: []
      words: [{(DQ ($ Id.VSub_At '@'))}]
      redirects: []
      do_fork: T
    )
  ]
)