(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:OIL_VERSION)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(head)} {(-n)} {(1)} {(oil-version.txt)})])
                left_token: <Left_CommandSub "$(">
                spids: [62 70]
              )
            }
          spids: [61]
        )
      ]
      spids: [59]
    )
    (FuncDef
      name: log
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_At "$@"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[86])]
            )
          ]
          spids: [77]
        )
      spids: [73 76]
    )
    (FuncDef
      name: build-and-test
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-r)} {(-f)} {(_devbuild)} {(_build)} {(_release)})
            (C {(rm)} {(-f)} {(_bin/oil.) (Lit_Other "*")})
            (C {(build/dev.sh)} {(pylibc)})
            (C {(build/doc.sh)} {(osh-quick-ref)})
            (C {(test/unit.sh)} {(all)})
            (C {(build/prepare.sh)} {(configure)})
            (C {(build/prepare.sh)} {(build-python)})
            (C {(make)} {(clean)})
            (C {(make)})
            (C {(test/spec.sh)} {(smoke)})
            (C {(test/spec.sh)} {(all)})
            (C {($ VSub_Number "$0")} {(oil)})
            (C {(build/test.sh)} {(oil-tar)})
            (C {(test/alpine.sh)} {(copy-tar)} {(oil)})
            (C {(test/alpine.sh)} {(test-tar)} {(oil)})
          ]
          spids: [237]
        )
      spids: [233 236]
    )
    (FuncDef
      name: _compressed-tarball
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(hello)})
                        spids: [412 416]
                      )
                    }
                  spids: [411]
                )
              ]
              spids: [409]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0.0.0)})
                        spids: [422 426]
                      )
                    }
                  spids: [421]
                )
              ]
              spids: [419]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:in)
                  op: Equal
                  rhs: {(_release/) ($ VSub_Name "$name") (.tar)}
                  spids: [432]
                )
              ]
              spids: [430]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(_release/) ($ VSub_Name "$name") (-) ($ VSub_Name "$version") (.tar.gz)}
                  spids: [440]
                )
              ]
              spids: [438]
            )
            (C {(build/actions.sh)} {(write-release-date)})
            (C {(make)} {($ VSub_Name "$in")})
            (TimeBlock
              pipeline: 
                (SimpleCommand
                  words: [{(gzip)} {(-c)} {($ VSub_Name "$in")}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {($ VSub_Name "$out")}
                      spids: [476]
                    )
                  ]
                )
            )
            (C {(ls)} {(-l)} {($ VSub_Name "$out")})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out2)
                  op: Equal
                  rhs: {(_release/) ($ VSub_Name "$name") (-) ($ VSub_Name "$version") (.tar.xz)}
                  spids: [495]
                )
              ]
              spids: [493]
            )
            (TimeBlock
              pipeline: 
                (SimpleCommand
                  words: [{(xz)} {(-c)} {($ VSub_Name "$in")}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {($ VSub_Name "$out2")}
                      spids: [511]
                    )
                  ]
                )
            )
            (C {(ls)} {(-l)} {($ VSub_Name "$out2")})
          ]
          spids: [406]
        )
      spids: [402 405]
    )
    (FuncDef
      name: oil
      body: 
        (BraceGroup
          children: [(C {(_compressed-tarball)} {(oil)} {($ VSub_Name "$OIL_VERSION")})]
          spids: [529]
        )
      spids: [525 528]
    )
    (FuncDef
      name: hello
      body: 
        (BraceGroup
          children: [
            (C {(_compressed-tarball)} {(hello)} 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(head)} {(-n)} {(1)} {(build/testdata/hello-version.txt)})]
                    )
                  left_token: <Left_CommandSub "$(">
                  spids: [552 560]
                )
              }
            )
          ]
          spids: [545]
        )
      spids: [541 544]
    )
    (FuncDef
      name: escape-segments
      body: 
        (BraceGroup
          children: [
            (C {(python)} {(-c)} 
              {
                (SQ <"\n"> <"import cgi, re, sys\n"> <"\n"> <"print re.sub(\n"> 
                  <"  r\"\\x00(.*)\\x01\", \n"> <"  lambda match: cgi.escape(match.group(1)),\n"> <"  sys.stdin.read())\n">
                )
              }
            )
          ]
          spids: [584]
        )
      spids: [580 583]
    )
    (FuncDef
      name: _git-changelog-body
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prev_branch)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [617]
                )
              ]
              spids: [615]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cur_branch)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [623]
                )
              ]
              spids: [621]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:format)
                  op: Equal
                  rhs: 
                    {
                      (SQ <"<tr>\n"> <"    <td><a class=\"checksum\"\n"> 
                        <"           href=\"https://github.com/oilshell/oil/commit/%H\">%h</a>\n"> <"    </td>\n"> <"    <td class=\"date\">%ad</td>\n"> <"    <td>%x00%an%x01</td>\n"> 
                        <"    <td class=\"subject\">%x00%s%x01</td>\n"> <"  </tr>">
                      )
                    }
                  spids: [647]
                )
              ]
              spids: [645]
            )
            (Pipeline
              children: [
                (C {(git)} {(log)} {($ VSub_Name "$prev_branch") (..) ($ VSub_Name "$cur_branch")} 
                  {(--reverse)} {(--pretty) (Lit_Other "=") (DQ ("format:") ($ VSub_Name "$format"))} 
                  {(--date) (Lit_Other "=") (short)}
                )
                (C {(escape-segments)})
              ]
              negated: False
            )
          ]
          spids: [612]
        )
      spids: [608 611]
    )
    (FuncDef
      name: _git-changelog-header
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prev_branch)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [707]
                )
              ]
              spids: [705]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cur_branch)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [713]
                )
              ]
              spids: [711]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("<!DOCTYPE html>\n") ("<html>\n") ("  <head>\n") 
                        ("    <title>Commits Between ") ($ VSub_Name "$prev_branch") (" and ") ($ VSub_Name "$cur_branch") ("</title>\n") ("    <style>\n") 
                        ("      /* Make it centered and skinny for readability */\n") ("      body {\n") ("        margin: 0 auto;\n") ("        width: 60em;\n") ("      }\n") 
                        ("      table {\n") ("        width: 100%;\n") ("      }\n") ("      code {\n") ("        color: green;\n") ("      }\n") 
                        ("      .checksum {\n") ("        font-family: monospace;\n") ("      }\n") ("      .date {\n") 
                        ("        /*font-family: monospace;*/\n") ("      }\n") ("      .subject {\n") ("        font-family: monospace;\n") ("      }\n") ("\n") 
                        ("      /* Copied from oilshell.org bundle.css */\n") ("      .date {\n") ("        font-size: medium;\n") ("        color: #555;\n") 
                        ("        padding-left: 1em;\n") ("      }\n") ("    </style>\n") ("  </head>\n") ("  <body>\n") 
                        ("    <h3>Commits Between Branches <code>") ($ VSub_Name "$prev_branch") ("</code> and\n") ("       <code>") ($ VSub_Name "$cur_branch") 
                        ("</code></h3>\n") ("    <table>\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [720]
                )
              ]
            )
          ]
          spids: [702]
        )
      spids: [698 701]
    )
    (FuncDef
      name: _git-changelog
      body: 
        (BraceGroup
          children: [
            (C {(_git-changelog-header)} {(DQ ($ VSub_At "$@"))})
            (C {(_git-changelog-body)} {(DQ ($ VSub_At "$@"))})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: {(DQ ("  </table>\n"))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [819]
                )
              ]
            )
            (C {(_html-footer)})
          ]
          spids: [800]
        )
      spids: [796 799]
    )
    (FuncDef
      name: git-changelog-0.1
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: {(SQ <0.1.0>)}
                  spids: [838]
                )
              ]
              spids: [836]
            )
            (SimpleCommand
              words: [{(_git-changelog)} {(release/0.0.0)} {(release/0.1.0)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: 
                    {(../oilshell.org__deploy/release/) ($ VSub_Name "$version") (/changelog.html)}
                  spids: [852]
                )
              ]
            )
          ]
          spids: [833]
        )
      spids: [829 832]
    )
    (FuncDef
      name: html-redirect
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:url)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [873]
                )
              ]
              spids: [871]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("<!DOCTYPE html>\n") ("<html>\n") ("  <head>\n") ("    <meta http-equiv=") 
                        (Right_DoubleQuote "\"") (refresh) (Right_DoubleQuote "\"") (" content=") (Right_DoubleQuote "\"") ("0; url=") ($ VSub_Name "$url") 
                        (Right_DoubleQuote "\"") (" />\n") ("  </head>\n") ("  <body>\n") ("    <p>Redirect to<a href=") (Right_DoubleQuote "\"") 
                        ($ VSub_Name "$url") (Right_DoubleQuote "\"") (">") ($ VSub_Name "$url") ("</a></p>\n") ("  </body>\n") ("</html>  \n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [879]
                )
              ]
            )
          ]
          spids: [868]
        )
      spids: [864 867]
    )
    (FuncDef
      name: announcement-0.0
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(html-redirect)} {(SQ </blog/2017/07/23.html>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(../oilshell.org__deploy/release/0.0.0/announcement.html)}
                  spids: [924]
                )
              ]
            )
          ]
          spids: [913]
        )
      spids: [909 912]
    )
    (FuncDef
      name: announcement-0.1
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: {(SQ <0.1.0>)}
                  spids: [940]
                )
              ]
              spids: [938]
            )
            (SimpleCommand
              words: [{(html-redirect)} {(SQ </blog/2017/09/09.html>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: 
                    {(../oilshell.org__deploy/release/) ($ VSub_Name "$version") (/announcement.html)}
                  spids: [954]
                )
              ]
            )
          ]
          spids: [935]
        )
      spids: [931 934]
    )
    (FuncDef
      name: deploy-doc
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:deploy_repo)
                  op: Equal
                  rhs: {(SQ <../oilshell.org__deploy>)}
                  spids: [972]
                )
              ]
              spids: [970]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_root_dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name "$deploy_repo") (/release))}
                  spids: [980]
                )
              ]
              spids: [978]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name "$release_root_dir") (/) ($ VSub_Name "$OIL_VERSION"))}
                  spids: [989]
                )
              ]
              spids: [987]
            )
            (C {(mkdir)} {(-p)} 
              (BracedWordTree
                parts: [
                  ($ VSub_Name "$release_dir")
                  (/)
                  (BracedAltPart words:[{(doc)}{(test)}{(metrics)}])
                ]
              )
            )
            (C {(cp)} {(-v)} {(_build/release-date.txt)} {(oil-version.txt)} 
              {($ VSub_Name "$release_dir")}
            )
            (SimpleCommand
              words: [{(scripts/count.sh)} {(all)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$release_dir") (/metrics/linecount-src.txt)}
                  spids: [1040]
                )
              ]
            )
            (SimpleCommand
              words: [{(build/metrics.sh)} {(linecount-pydeps)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$release_dir") (/metrics/linecount-pydeps.txt)}
                  spids: [1055]
                )
              ]
            )
            (SimpleCommand
              words: [{(build/metrics.sh)} {(linecount-nativedeps)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$release_dir") (/metrics/linecount-nativedeps.txt)}
                  spids: [1067]
                )
              ]
            )
            (C {(cp)} {(-v)} {(-r)} {(--force)} {(--dereference)} {(--no-target-directory)} {(_tmp/spec/)} 
              {($ VSub_Name "$release_dir") (/test/spec)}
            )
            (C {(html-index)} {($ VSub_Name "$release_root_dir")} {(_tmp/releases.html)})
            (C {(cp)} {(-v)} {(_tmp/releases.html)} {($ VSub_Name "$deploy_repo")})
            (C {(build/doc.sh)} {(osh-quick-ref)})
            (C {(build/doc.sh)} {(install)})
            (C {(cp)} {(-v)} {(-r)} {(--no-target-directory)} {(_build/doc/)} 
              {($ VSub_Name "$release_dir") (/doc)}
            )
            (C {(build/doc.sh)} {(release-index)} {($ VSub_Name "$release_dir") (/index.html)})
            (C {(tree)} {(-L)} {(3)} {($ VSub_Name "$release_root_dir")})
            (C {(ls)} {(-l)} {($ VSub_Name "$deploy_repo") (/releases.html)})
          ]
          spids: [967]
        )
      spids: [963 966]
    )
    (FuncDef
      name: deploy-tar
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:download_dir)
                  op: Equal
                  rhs: {(SQ <../oilshell.org__deploy/download/>)}
                  spids: [1202]
                )
              ]
              spids: [1200]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name "$download_dir")})
            (C {(cp)} {(-v)} {(_release/oil-) ($ VSub_Name "$OIL_VERSION") (.tar.) (Lit_Other "*")} 
              {($ VSub_Name "$download_dir")}
            )
            (C {(ls)} {(-l)} {($ VSub_Name "$download_dir")})
          ]
          spids: [1197]
        )
      spids: [1193 1196]
    )
    (FuncDef
      name: _release-files-html
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [1285]
                )
              ]
              spids: [1283]
            )
            (C {(echo)} {(SQ <"<table class=\"file-table\">">)})
            (C {(echo)} 
              {
                (SQ 
                  <
"<tr><thead> <td>File</td> <td>Size</td> <td>SHA256 Checksum</td> </thead></tr>"
                  >
                )
              }
            )
            (ForEach
              iter_name: name
              iter_words: [
                (BracedWordTree
                  parts: [(oil-) ($ VSub_Name "$version") (.tar.) (BracedAltPart words:[{(xz)}{(gz)}])]
                )
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:url)
                          op: Equal
                          rhs: {(DQ (download/) ($ VSub_Name "$name"))}
                          spids: [1326]
                        )
                      ]
                      spids: [1324]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:path)
                          op: Equal
                          rhs: {(../oilshell.org__deploy/download/) ($ VSub_Name "$name")}
                          spids: [1338]
                        )
                      ]
                      spids: [1336]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:checksum)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(sha256sum)} {($ VSub_Name "$path")})
                                          (C {(awk)} {(SQ <"{print $1}">)})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1346 1358]
                              )
                            }
                          spids: [1345]
                        )
                      ]
                      spids: [1343]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:size)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(stat)} {(--format)} {(SQ <"%s">)} {($ VSub_Name "$path")})
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1364 1374]
                              )
                            }
                          spids: [1363]
                        )
                      ]
                      spids: [1361]
                    )
                    (C {(echo)} 
                      {(SQ <"<tr> <td class=\"filename\"><a href=\"">) ($ VSub_Name "$url") 
                        (SQ <"\">">) ($ VSub_Name "$name") (SQ <"</a></td>\n"> <"               <td class=\"size\">">) ($ VSub_Name "$size") 
                        (SQ <"</td>\n"> <"               <td class=\"checksum\">">) ($ VSub_Name "$checksum") (SQ <"</td>\n"> <"         </tr>">)
                      }
                    )
                  ]
                  spids: [1321 1409]
                )
              spids: [1310 1319]
            )
            (C {(echo)} {(SQ <"</table>">)})
          ]
          spids: [1280]
        )
      spids: [1276 1279]
    )
    (FuncDef
      name: _html-index
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_root_dir)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [1485]
                )
              ]
              spids: [1483]
            )
            (ForEach
              iter_name: entry
              iter_words: [{($ VSub_Name "$release_root_dir") (/) (Lit_Other "*")}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [(C {(test)} {(-d)} {($ VSub_Name "$entry")})]
                                  negated: True
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [-1 1518]
                        )
                      ]
                      spids: [-1 1524]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:dir)
                          op: Equal
                          rhs: {($ VSub_Name "$entry")}
                          spids: [1529]
                        )
                      ]
                      spids: [1527]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:version)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(head)} {(-n)} {(1)} {($ VSub_Name "$dir") (/oil-version.txt)})
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1537 1546]
                              )
                            }
                          spids: [1536]
                        )
                      ]
                      spids: [1534]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:release_date)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(head)} {(-n)} {(1)} {($ VSub_Name "$dir") (/release-date.txt)})
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1552 1561]
                              )
                            }
                          spids: [1551]
                        )
                      ]
                      spids: [1549]
                    )
                    (C {(log)} {(DQ ("-- ") ($ VSub_Name "$dir"))})
                    (C {(log)} {(DQ ("Version: ") ($ VSub_Name "$version"))})
                    (C {(log)} {(DQ ("Release Date: ") ($ VSub_Name "$release_date"))})
                    (C {(log)} {(DQ )})
                    (C {(echo)} {(DQ ($ VSub_Name "$release_date") (" ") ($ VSub_Name "$version"))})
                  ]
                  spids: [1504 1605]
                )
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(_tmp/release-meta.txt)}
                  spids: [1607]
                )
              ]
              spids: [1498 1502]
            )
            (SimpleCommand
              words: [{(sort)} {(-r)} {(_tmp/release-meta.txt)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(_tmp/sorted-releases.txt)}
                  spids: [1623]
                )
              ]
            )
            (While
              cond: [(Sentence child:(C {(read)} {(date)} {(_)} {(version)}) terminator:<Op_Semi ";">)]
              body: 
                (DoGroup
                  children: [
                    (C {(log)} {(DQ ("Release Date: ") ($ VSub_Name "$date"))})
                    (C {(log)} {(DQ ("Version: ") ($ VSub_Name "$version"))})
                    (C {(echo)} {(SQ <"<a name=\"">) ($ VSub_Name "$version") (SQ <"\"></a>">)})
                    (C {(echo)} {(DQ ("<h2>Version ") ($ VSub_Name "$version") ("</h2>"))})
                    (C {(echo)} {(DQ ("<p class=")) (date) (DQ (">") ($ VSub_Name "$date") ("</p>"))})
                    (C {(echo)} 
                      {(SQ <"<p>                 <a href=\"release/">) ($ VSub_Name "$version") 
                        (SQ <"/announcement.html\">Release Announcment</a>\n"> 
                          <"              &nbsp; | &nbsp; <a href=\"release/">
                        ) ($ VSub_Name "$version") 
                        (SQ <"/doc/INSTALL.html\">INSTALL</a>\n"> 
                          <"              &nbsp; | &nbsp; <a href=\"release/">
                        ) ($ VSub_Name "$version") (SQ <"/\">Docs and Details</a>\n"> <"          </p>">)
                      }
                    )
                    (C {(_release-files-html)} {($ VSub_Name "$version")})
                  ]
                  spids: [1640 1731]
                )
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: -1
                  arg_word: {(_tmp/sorted-releases.txt)}
                  spids: [1733]
                )
              ]
            )
          ]
          spids: [1480]
        )
      spids: [1476 1479]
    )
    (FuncDef
      name: _releases-html-header
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("<!DOCTYPE html>\n") ("<html>\n") ("  <head>\n") 
                        ("    <title>Oil Releases</title>\n") ("    <style>\n") ("      /* Make it centered and skinny for readability */\n") ("      body {\n") 
                        ("        margin: 0 auto;\n") ("        width: 60em;\n") ("      }\n") ("      h1 {\n") ("        text-align: center;\n") ("      }\n") 
                        ("      thead {\n") ("        font-weight: bold;\n") ("      }\n") ("      /* Style for checksum, file size, etc. */\n") 
                        ("\n") ("      .file-table {\n") ("        width: 100%;\n") ("      }\n") ("\n") ("      .filename {\n") 
                        ("        font-family: monospace;\n") ("      }\n") ("\n") ("      .size {\n") ("      }\n") ("      .checksum {\n") 
                        ("        font-family: monospace;\n") ("        color: #555;\n") ("      }\n") ("\n") ("      /* Copied from oilshell.org bundle.css */\n") 
                        ("      .date {\n") ("        font-size: medium;\n") ("        color: #555;\n") ("        padding-left: 1em;\n") 
                        ("      }\n") ("    </style>\n") ("  </head>\n") ("  <body>\n") ("    <p></p>\n") ("    <h1>Oil Releases</h1>\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1749]
                )
              ]
            )
          ]
          spids: [1744]
        )
      spids: [1740 1743]
    )
    (FuncDef
      name: _html-footer
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: {(DQ ("  </body>\n") ("</html>\n"))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1808]
                )
              ]
            )
          ]
          spids: [1803]
        )
      spids: [1799 1802]
    )
    (FuncDef
      name: html-index
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_root_dir)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [1825]
                )
              ]
              spids: [1823]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (releases.html)}
                          )
                        spids: [1832 1838]
                      )
                    }
                  spids: [1831]
                )
              ]
              spids: [1829]
            )
            (BraceGroup
              children: [
                (C {(_releases-html-header)})
                (C {(_html-index)} {($ VSub_Name "$release_root_dir")})
                (C {(_html-footer)})
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$out")}
                  spids: [1857]
                )
              ]
              spids: [1842]
            )
            (C {(ls)} {(-l)} {($ VSub_Name "$out")})
          ]
          spids: [1820]
        )
      spids: [1816 1819]
    )
    (C {(DQ ($ VSub_At "$@"))})
  ]
)