(command.CommandList children: [ (C {<set>} {<-o>} {<nounset>}) (C {<set>} {<-o>} {<pipefail>}) (C {<set>} {<-o>} {<errexit>}) (C {<readonly>} {<Id.Lit_VarLike 'OIL_VERSION='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<head>} {<-n>} {<1>} {<oil-version.txt>}) ) } ) (C {<readonly>} {<Id.Lit_VarLike 'OSH_RELEASE_BINARY='> <'_tmp/oil-tar-test/oil-'> ($ Id.VSub_DollarName '$OIL_VERSION') <'/_bin/osh'> } ) (command.ShFunction name: log body: (BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] ) ) (command.ShFunction name: _clean-tmp-dirs body: (BraceGroup children: [ (C {<rm>} {<-r>} {<-f>} (word.BracedTree parts: [ <'_tmp/'> (word_part.BracedTuple words: [{<spec>} {<wild>} {<unit>} {<gold>} {<osh2oil>}] ) ] ) (word.BracedTree parts: [ <'_tmp/'> (word_part.BracedTuple words: [{<osh-parser>} {<osh-runtime>} {<vm-baseline>} {<ovm-build>} {<oheap>}] ) ] ) {<'_tmp/metrics'>} {<'_tmp/oil-tar-test'>} ) ] ) ) (command.ShFunction name: _clean body: (BraceGroup children: [ (C {<_clean-tmp-dirs>}) (C {<rm>} {<-r>} {<-f>} {<_devbuild>}) (C {<'build/actions.sh'>} {<clean-repo>}) ] ) ) (command.ShFunction name: _dev-build body: (BraceGroup children:[(C {<'build/dev.sh'>} {<all>})]) ) (command.ShFunction name: _release-build body: (BraceGroup children: [ (C {<'build/prepare.sh'>} {<configure>}) (C {<'build/prepare.sh'>} {<build-python>}) (C {($ Id.VSub_Number '$0')} {<oil>}) (C {<'build/test.sh'>} {<oil-tar>}) (C {<ln>} {<-s>} {<-f>} {<--no-target-directory>} {<-v>} {<oil.ovm>} {($ Id.VSub_DollarName '$OSH_RELEASE_BINARY')} ) ] ) ) (command.ShFunction name: _test-release-build body: (BraceGroup children: [ (C {<'test/alpine.sh'>} {<copy-tar>} {(SQ )} {<oil>}) (C {<'test/alpine.sh'>} {<test-tar>} {(SQ )} {<oil>}) (C {<'test/spec.sh'>} {<link-busybox-ash>}) (C {<'test/spec.sh'>} {<smoke>}) (C {<'test/osh2oil.sh'>} {<run-for-release>}) (C {<'test/gold.sh'>} {<run-for-release>}) (command.Simple words: [{<'test/spec.sh'>} {<all>}] more_env: [ (env_pair name: OSH_OVM val: {($ Id.VSub_DollarName '$OSH_RELEASE_BINARY')} spids: [554] ) ] do_fork: T ) ] ) ) (command.ShFunction name: build-and-test body: (BraceGroup children: [ (C {<_clean>}) (C {<_dev-build>}) (C {<'test/unit.sh'>} {<run-for-release>}) (C {<_release-build>}) (C {<_test-release-build>}) ] ) ) (command.ShFunction name: _install body: (BraceGroup children: [ (C {<'test/spec.sh'>} {<install-shells>}) (C {<sudo>} {<apt>} {<install>} {<python-dev>}) ] ) ) (command.ShFunction name: benchmark-build body: (BraceGroup children: [(C {<_install>}) (C {<_clean>}) (C {<_dev-build>}) (C {<_release-build>})] ) ) (command.ShFunction name: benchmark-run body: (BraceGroup children: [ (command.Simple words: [{<'benchmarks/auto.sh'>} {<all>}] more_env: [ (env_pair name: OSH_OVM val: {($ Id.VSub_DollarName '$OSH_RELEASE_BINARY')} spids: [666] ) ] do_fork: T ) ] ) ) (command.ShFunction name: benchmark-run-on-1-machine body: (BraceGroup children: [ (command.Simple words: [{<'benchmarks/oheap.sh'>} {<measure>}] more_env: [ (env_pair name: OSH_OVM val: {($ Id.VSub_DollarName '$OSH_RELEASE_BINARY')} spids: [683] ) ] do_fork: T ) ] ) ) (command.ShFunction name: _compressed-tarball body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'name='> (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<hello>}) ) } ) (C {<local>} {<Id.Lit_VarLike 'version='> (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<0.0.0>}) ) } ) (C {<local>} {<Id.Lit_VarLike 'in='> <'_release/'> ($ Id.VSub_DollarName '$name') <.tar>}) (C {<local>} {<Id.Lit_VarLike 'out='> <'_release/'> ($ Id.VSub_DollarName '$name') <-> ($ Id.VSub_DollarName '$version') <.tar.gz> } ) (C {<'build/actions.sh'>} {<write-release-date>}) (C {<make>} {($ Id.VSub_DollarName '$in')}) (command.TimeBlock pipeline: (command.Simple words: [{<gzip>} {<-c>} {($ Id.VSub_DollarName '$in')}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out')} ) ] do_fork: T ) ) (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$out')}) (C {<local>} {<Id.Lit_VarLike 'out2='> <'_release/'> ($ Id.VSub_DollarName '$name') <-> ($ Id.VSub_DollarName '$version') <.tar.xz> } ) (command.TimeBlock pipeline: (command.Simple words: [{<xz>} {<-c>} {($ Id.VSub_DollarName '$in')}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out2')} ) ] do_fork: T ) ) (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$out2')}) ] ) ) (command.ShFunction name: oil body: (BraceGroup children: [(C {<_compressed-tarball>} {<oil>} {($ Id.VSub_DollarName '$OIL_VERSION')})] ) ) (command.ShFunction name: hello body: (BraceGroup children: [ (C {<_compressed-tarball>} {<hello>} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<head>} {<-n>} {<1>} {<'build/testdata/hello-version.txt'>}) ) } ) ] ) ) (command.ShFunction 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'> ) } ) ] ) ) (command.ShFunction name: _git-changelog-body body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'prev_branch='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'cur_branch='> ($ Id.VSub_Number '$2')}) (C {<local>} {<Id.Lit_VarLike 'format='> (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>'> ) } ) (command.Pipeline children: [ (C {<git>} {<log>} {($ Id.VSub_DollarName '$prev_branch') <..> ($ Id.VSub_DollarName '$cur_branch')} {<--reverse>} {<--pretty> <Id.Lit_Equals '='> (DQ <'format:'> ($ Id.VSub_DollarName '$format'))} {<--date> <Id.Lit_Equals '='> <short>} ) (C {<escape-segments>}) ] negated: F ) ] ) ) (command.ShFunction name: _git-changelog-header body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'prev_branch='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'cur_branch='> ($ Id.VSub_Number '$2')}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1065 stdin_parts: [ <'<!DOCTYPE html>\n'> <'<html>\n'> <' <head>\n'> <' <title>Commits Between '> ($ Id.VSub_DollarName '$prev_branch') <' and '> ($ Id.VSub_DollarName '$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>'> ($ Id.VSub_DollarName '$prev_branch') <'</code> and\n'> <' <code>'> ($ Id.VSub_DollarName '$cur_branch') <'</code></h3>\n'> <' <table>\n'> ] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: _git-changelog body: (BraceGroup children: [ (C {<_git-changelog-header>} {(DQ ($ Id.VSub_At '$@'))}) (C {<_git-changelog-body>} {(DQ ($ Id.VSub_At '$@'))}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1121 stdin_parts: [<' </table>\n'>] ) ) ] do_fork: T ) (C {<_html-footer>}) ] ) ) (command.ShFunction name: git-changelog-0.1 body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'version='> (SQ <0.1.0>)}) (command.Simple words: [{<_git-changelog>} {<'release/0.0.0'>} {<'release/0.1.0'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'../oilshell.org__deploy/release/'> ($ Id.VSub_DollarName '$version') <'/changelog.html'> } ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.2.alpha1 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.1.0'>} {<'release/0.2.alpha1'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.2.0 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.1.0'>} {<'release/0.2.0'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.3.alpha1 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.2.0'>} {<'release/0.3.alpha1'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.3.0 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.2.0'>} {<'release/0.3.0'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.4.0 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.3.0'>} {<'release/0.4.0'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.5.alpha1 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.4.0'>} {<'release/0.5.alpha1'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.5.alpha2 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.5.alpha1'>} {<'release/0.5.alpha2'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: git-changelog-0.5.alpha3 body: (BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<'release/0.5.alpha2'>} {<'release/0.5.alpha3'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/changelog.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: html-redirect body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'url='> ($ Id.VSub_Number '$1')}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1386 stdin_parts: [ <'<!DOCTYPE html>\n'> <'<html>\n'> <' <head>\n'> <' <meta http-equiv='> <Id.Right_DoubleQuote '"'> <refresh> <Id.Right_DoubleQuote '"'> <' content='> <Id.Right_DoubleQuote '"'> <'0; url='> ($ Id.VSub_DollarName '$url') <Id.Right_DoubleQuote '"'> <' />\n'> <' </head>\n'> <' <body>\n'> <' <p>Redirect to<a href='> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$url') <Id.Right_DoubleQuote '"'> <'>'> ($ Id.VSub_DollarName '$url') <'</a></p>\n'> <' </body>\n'> <'</html> \n'> ] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: no-announcement body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1411 stdin_parts: [ <'<!DOCTYPE html>\n'> <'<html>\n'> <' <head>\n'> <' </head>\n'> <' <body>\n'> <' <p>No announcement for this release.</p>\n'> <' </body>\n'> <'</html> \n'> ] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: write-no-announcement body: (BraceGroup children: [ (command.Simple words: [{<no-announcement>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/announcement.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: announcement-0.0 body: (BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ <'/blog/2017/07/23.html'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'../oilshell.org__deploy/release/0.0.0/announcement.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: announcement-0.1 body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'version='> (SQ <0.1.0>)}) (command.Simple words: [{<html-redirect>} {(SQ <'/blog/2017/09/09.html'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'../oilshell.org__deploy/release/'> ($ Id.VSub_DollarName '$version') <'/announcement.html'> } ) ] do_fork: T ) ] ) ) (command.ShFunction name: announcement-0.2 body: (BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ <'/blog/2017/11/10.html'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/announcement.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: announcement-0.3 body: (BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ <'/blog/2017/12/22.html'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/announcement.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: announcement-0.4 body: (BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ <'/blog/2018/02/03.html'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/announcement.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: announcement-0.5.alpha3 body: (BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ <'/blog/2018/04/30.html'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_release/VERSION/announcement.html'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: _link body: (BraceGroup children: [ (C {<ln>} {<-s>} {<-f>} {<-v>} {<--no-target-directory>} {(DQ ($ Id.VSub_At '$@'))}) ] ) ) (command.ShFunction name: compress-txt body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'name='> ($ Id.VSub_Number '$1')}) (C {<log>} {(DQ <'--- test/'> ($ Id.VSub_DollarName '$name'))}) (C {<local>} {<Id.Lit_VarLike 'out='> (DQ ($ Id.VSub_DollarName '$root') <'/test/'> ($ Id.VSub_DollarName '$name') <.wwz>) } ) (C {<pushd>} {<'_tmp/'> ($ Id.VSub_DollarName '$name')}) (command.TimeBlock pipeline: (C {<zip>} {<-r>} {<-q>} {($ Id.VSub_DollarName '$out')} {<.>}) ) (C {<popd>}) ] ) ) (command.ShFunction name: compress body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'root='> ($ Id.VSub_DollarName '$PWD') <'/_release/VERSION/'>} ) (C {<compress-txt>} {<osh2oil>}) (C {<compress-txt>} {<gold>}) (C {<log>} {(DQ <'--- test/unit'>)}) (C {<local>} {<Id.Lit_VarLike 'out='> (DQ ($ Id.VSub_DollarName '$root') <'/test/unit.wwz'>)} ) (C {<pushd>} {<'_tmp/unit'>}) (command.TimeBlock pipeline: (C {<zip>} {<-r>} {<-q>} {($ Id.VSub_DollarName '$out')} {<.>}) ) (C {<popd>}) (C {<log>} {(DQ <'--- test/spec'>)}) (C {<local>} {<Id.Lit_VarLike 'out='> (DQ ($ Id.VSub_DollarName '$root') <'/test/spec.wwz'>)} ) (C {<pushd>} {<'_tmp/spec'>}) (command.TimeBlock pipeline: (C {<zip>} {<-r>} {<-q>} {($ Id.VSub_DollarName '$out')} {<.>}) ) (C {<popd>}) (C {<log>} {(DQ <'--- test/wild'>)}) (C {<local>} {<Id.Lit_VarLike 'out='> (DQ ($ Id.VSub_DollarName '$root') <'/test/wild.wwz'>)} ) (C {<pushd>} {<'_tmp/wild/www'>}) (command.TimeBlock pipeline: (C {<zip>} {<-r>} {<-q>} {($ Id.VSub_DollarName '$out')} {<.>}) ) (C {<popd>}) (C {<log>} {(DQ <'--- metrics'>)}) (C {<local>} {<Id.Lit_VarLike 'out='> (DQ ($ Id.VSub_DollarName '$root') <'/metrics.wwz'>)}) (C {<pushd>} {<'_tmp/metrics'>}) (command.TimeBlock pipeline: (C {<zip>} {<-r>} {<-q>} {($ Id.VSub_DollarName '$out')} {<.>}) ) (C {<popd>}) (C {<compress-benchmarks>}) (C {<tree>} {<'_release/VERSION'>}) ] ) ) (command.ShFunction name: compress-benchmarks body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'root='> ($ Id.VSub_DollarName '$PWD') <'/_release/VERSION/'>} ) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$root')}) (C {<log>} {(DQ <'--- benchmarks'>)}) (C {<local>} {<Id.Lit_VarLike 'out='> (DQ ($ Id.VSub_DollarName '$root') <'/benchmarks.wwz'>)} ) (C {<pushd>} {<_tmp>}) (command.Pipeline children: [ (C {<find>} (word.BracedTree parts: [ <'osh-parser/'> (word_part.BracedTuple words: [{<stage1>} {<stage2>} {<index.html>}] ) ] ) (word.BracedTree parts: [ <'osh-runtime/'> (word_part.BracedTuple words: [{<stage1>} {<stage2>} {<index.html>}] ) ] ) (word.BracedTree parts: [ <'vm-baseline/'> (word_part.BracedTuple words: [{<stage1>} {<stage2>} {<index.html>}] ) ] ) (word.BracedTree parts: [ <'ovm-build/'> (word_part.BracedTuple words: [{<stage1>} {<stage2>} {<index.html>}] ) ] ) (word.BracedTree parts: [ <'oheap/'> (word_part.BracedTuple words: [{<stage1>} {<stage2>} {<index.html>}] ) ] ) {<-type>} {<f>} ) (C {<xargs>} {<--verbose>} {<-->} {<zip>} {<-q>} {($ Id.VSub_DollarName '$out')}) ] negated: F ) (C {<popd>}) ] ) ) (command.ShFunction name: line-counts body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'out='> ($ Id.VSub_Number '$1')}) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out')}) (command.Simple words: [{<'build/metrics.sh'>} {<linecount-pydeps>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out') <'/pydeps.txt'>} ) ] do_fork: T ) (command.Simple words: [{<'build/metrics.sh'>} {<linecount-nativedeps>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out') <'/nativedeps.txt'>} ) ] do_fork: T ) (command.Simple words: [{<'scripts/count.sh'>} {<all>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out') <'/src.txt'>} ) ] do_fork: T ) (command.Simple words: [{<'scripts/count.sh'>} {<parser>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out') <'/parser.txt'>} ) ] do_fork: T ) (command.Simple words: [{<'scripts/count.sh'>} {<runtime>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out') <'/runtime.txt'>} ) ] do_fork: T ) (command.Simple words: [{<'scripts/count.sh'>} {<oil-osh-cloc>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out') <'/oil-osh-cloc.txt'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: metrics body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'out='> <'_tmp/metrics'>}) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out')}) (command.Simple words: [{<'build/metrics.sh'>} {<pyc-bytes>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out') <'/pyc-bytes.txt'>} ) ] do_fork: T ) (C {<line-counts>} {($ Id.VSub_DollarName '$out') <'/line-counts'>}) (C {<tree>} {($ Id.VSub_DollarName '$out')}) ] ) ) (command.ShFunction name: _copy-path body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'src='> ($ Id.VSub_Number '$1')} {<Id.Lit_VarLike 'dest='> ($ Id.VSub_Number '$2')} ) (C {<mkdir>} {<-p>} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<dirname>} {($ Id.VSub_DollarName '$dest')}) ) } ) (C {<cp>} {<-v>} {($ Id.VSub_DollarName '$src')} {($ Id.VSub_DollarName '$dest')}) ] ) ) (command.ShFunction name: copy-web body: (BraceGroup children: [ (command.Pipeline children: [ (C {<find>} {<web>} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>)} {<-name>} {<_tmp>} {<-a>} {<-prune>} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\)'>)} {<-o>} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>)} {<-name>} {(SQ <'*.css'>)} {<-o>} {<-name>} {(SQ <'*.js'>)} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\)'>)} {<-a>} {<-printf>} {(SQ <'%p _release/VERSION/%p\\n'>)} ) (C {<xargs>} {<-n>} {<2>} {<-->} {($ Id.VSub_Number '$0')} {<_copy-path>}) ] negated: F ) ] ) ) (command.ShFunction name: build-tree body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'root='> <'_release/VERSION'>}) (C {<mkdir>} {<-p>} (word.BracedTree parts: [ ($ Id.VSub_DollarName '$root') <'/'> (word_part.BracedTuple words:[{<doc>} {<test>}]) ] ) ) (C {<cp>} {<-v>} {<'_build/release-date.txt'>} {<oil-version.txt>} {($ Id.VSub_DollarName '$root')} ) (C {<'build/doc.sh'>} {<osh-quick-ref>} {<'_release/VERSION'>}) (C {<'build/doc.sh'>} {<install>}) (C {<'build/doc.sh'>} {<release-index>} {($ Id.VSub_DollarName '$root') <'/index.html'>}) (C {<copy-web>}) (C {<tree>} {($ Id.VSub_DollarName '$root')}) ] ) ) (command.ShFunction name: deploy-doc body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'deploy_repo='> (SQ <'../oilshell.org__deploy'>)}) (C {<local>} {<Id.Lit_VarLike 'release_root_dir='> (DQ ($ Id.VSub_DollarName '$deploy_repo') <'/release'>) } ) (C {<local>} {<Id.Lit_VarLike 'release_dir='> (DQ ($ Id.VSub_DollarName '$release_root_dir') <'/'> ($ Id.VSub_DollarName '$OIL_VERSION') ) } ) (C {<cp>} {<-v>} {<-r>} {<--force>} {<--no-target-directory>} {<'_release/VERSION/'>} {($ Id.VSub_DollarName '$release_dir') <'/'>} ) (C {<html-index>} {($ Id.VSub_DollarName '$release_root_dir')} {<'_tmp/releases.html'>}) (C {<cp>} {<-v>} {<'_tmp/releases.html'>} {($ Id.VSub_DollarName '$deploy_repo')}) (C {<tree>} {<-L>} {<3>} {($ Id.VSub_DollarName '$release_root_dir')}) (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$deploy_repo') <'/releases.html'>}) ] ) ) (command.ShFunction name: deploy-tar body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'download_dir='> (SQ <'../oilshell.org__deploy/download/'>)}) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$download_dir')}) (C {<cp>} {<-v>} {<'_release/oil-'> ($ Id.VSub_DollarName '$OIL_VERSION') <.tar.> <Id.Lit_Star '*'>} {($ Id.VSub_DollarName '$download_dir')} ) (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$download_dir')}) ] ) ) (command.ShFunction name: _release-files-html body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'version='> ($ Id.VSub_Number '$1')}) (C {<echo>} {(SQ <'<table class="file-table">'>)}) (C {<echo>} { (SQ <'<tr><thead> <td>File</td> <td>Size</td> <td>SHA256 Checksum</td> </thead></tr>'> ) } ) (command.ForEach iter_names: [name] iterable: (for_iter.Words words: [ (word.BracedTree parts: [ <oil-> ($ Id.VSub_DollarName '$version') <.tar.> (word_part.BracedTuple words:[{<xz>} {<gz>}]) ] ) ] ) body: (command.DoGroup children: [ (C {<local>} {<Id.Lit_VarLike 'url='> (DQ <'download/'> ($ Id.VSub_DollarName '$name'))} ) (C {<local>} {<Id.Lit_VarLike 'path='> <'../oilshell.org__deploy/download/'> ($ Id.VSub_DollarName '$name') } ) (C {<local>} {<Id.Lit_VarLike 'checksum='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<sha256sum>} {($ Id.VSub_DollarName '$path')}) (C {<awk>} {(SQ <'{print $1}'>)}) ] negated: F ) ) } ) (C {<local>} {<Id.Lit_VarLike 'size='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<stat>} {<--format>} {(SQ <'%s'>)} {($ Id.VSub_DollarName '$path')}) ) } ) (C {<echo>} {(SQ <'<tr> <td class="filename"><a href="'>) ($ Id.VSub_DollarName '$url') (SQ <'">'>) ($ Id.VSub_DollarName '$name') (SQ <'</a></td>\n'> <' <td class="size">'>) ($ Id.VSub_DollarName '$size') (SQ <'</td>\n'> <' <td class="checksum">'>) ($ Id.VSub_DollarName '$checksum') (SQ <'</td>\n'> <' </tr>'>) } ) ] ) ) (C {<echo>} {(SQ <'</table>'>)}) ] ) ) (command.ShFunction name: _html-index body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'release_root_dir='> ($ Id.VSub_Number '$1')}) (command.ForEach iter_names: [entry] iterable: (for_iter.Words words: [{($ Id.VSub_DollarName '$release_root_dir') <'/'> <Id.Lit_Star '*'>}] ) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [(C {<test>} {<-d>} {($ Id.VSub_DollarName '$entry')})] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Continue continue>)] spids: [2801 2812] ) ] ) (C {<local>} {<Id.Lit_VarLike 'dir='> ($ Id.VSub_DollarName '$entry')}) (C {<local>} {<Id.Lit_VarLike 'version='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<head>} {<-n>} {<1>} {($ Id.VSub_DollarName '$dir') <'/oil-version.txt'>}) ) } ) (C {<local>} {<Id.Lit_VarLike 'release_date='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<head>} {<-n>} {<1>} {($ Id.VSub_DollarName '$dir') <'/release-date.txt'>} ) ) } ) (C {<log>} {(DQ <'-- '> ($ Id.VSub_DollarName '$dir'))}) (C {<log>} {(DQ <'Version: '> ($ Id.VSub_DollarName '$version'))}) (C {<log>} {(DQ <'Release Date: '> ($ Id.VSub_DollarName '$release_date'))}) (C {<log>} {(DQ )}) (C {<echo>} { (DQ ($ Id.VSub_DollarName '$release_date') <' '> ($ Id.VSub_DollarName '$version') ) } ) ] ) redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_tmp/release-meta.txt'>} ) ] ) (command.Simple words: [{<sort>} {<-r>} {<'_tmp/release-meta.txt'>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_tmp/sorted-releases.txt'>} ) ] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<read>} {<date>} {<Id.Lit_Underscore _>} {<version>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (C {<log>} {(DQ <'Release Date: '> ($ Id.VSub_DollarName '$date'))}) (C {<log>} {(DQ <'Version: '> ($ Id.VSub_DollarName '$version'))}) (C {<echo>} {(SQ <'<a name="'>) ($ Id.VSub_DollarName '$version') (SQ <'"></a>'>)}) (C {<echo>} {(DQ <'<h2>Version '> ($ Id.VSub_DollarName '$version') <'</h2>'>)}) (C {<echo>} {(DQ <'<p class='>) <date> (DQ <'>'> ($ Id.VSub_DollarName '$date') <'</p>'>)} ) (C {<echo>} {(SQ <'<p> <a href="release/'>) ($ Id.VSub_DollarName '$version') (SQ <'/announcement.html">Release Announcement</a>\n'> <' | <a href="release/'> ) ($ Id.VSub_DollarName '$version') (SQ <'/doc/INSTALL.html">INSTALL</a>\n'> <' | <a href="release/'> ) ($ Id.VSub_DollarName '$version') (SQ <'/">Docs and Details</a>\n'> <' </p>'>) } ) (C {<_release-files-html>} {($ Id.VSub_DollarName '$version')}) ] ) redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {<'_tmp/sorted-releases.txt'>} ) ] ) ] ) ) (command.ShFunction name: _releases-html-header body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3100 stdin_parts: [ <'<!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'> <' #home-link {\n'> <' text-align: right;\n'> <' }\n'> <' </style>\n'> <' </head>\n'> <' <body>\n'> <' <p id='> <Id.Right_DoubleQuote '"'> <home-link> <Id.Right_DoubleQuote '"'> <'>\n'> <' <a href='> <Id.Right_DoubleQuote '"'> <'/'> <Id.Right_DoubleQuote '"'> <'>oilshell.org</a>\n'> <' </p>\n'> <' <h1>Oil Releases</h1>\n'> ] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: _html-footer body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3119 stdin_parts: [<' </body>\n'> <'</html>\n'>] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: html-index body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'release_root_dir='> ($ Id.VSub_Number '$1')}) (C {<local>} {<Id.Lit_VarLike 'out='> (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonHyphen ':-'> arg_word: {<_tmp> <Id.Lit_Slash '/'> <releases.html>} ) ) } ) (BraceGroup children: [ (C {<_releases-html-header>}) (C {<_html-index>} {($ Id.VSub_DollarName '$release_root_dir')}) (C {<_html-footer>}) ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$out')} ) ] ) (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$out')}) ] ) ) (C {(DQ ($ Id.VSub_At '$@'))}) ] )