(command.CommandList children: [ (C {<Id.KW_Set set>} {<-o>} {<nounset>}) (C {<Id.KW_Set set>} {<-o>} {<pipefail>}) (C {<Id.KW_Set set>} {<-o>} {<errexit>}) (C {<readonly>} {<Id.Lit_VarLike 'OIL_VERSION='> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(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: (command.BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '1>&'> fd:1 arg_word:{<2>})] ) ] ) ) (command.ShFunction name: _clean-tmp-dirs body: (command.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: (command.BraceGroup children: [ (C {<_clean-tmp-dirs>}) (C {<rm>} {<-r>} {<-f>} {<_devbuild>}) (C {<build/actions.sh>} {<clean-repo>}) ] ) ) (command.ShFunction name: _dev-build body: (command.BraceGroup children:[(C {<build/dev.sh>} {<all>})]) ) (command.ShFunction name: _release-build body: (command.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: (command.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] ) ] ) ] ) ) (command.ShFunction name: build-and-test body: (command.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: (command.BraceGroup children: [ (C {<test/spec.sh>} {<install-shells>}) (C {<sudo>} {<apt>} {<install>} {<python-dev>}) ] ) ) (command.ShFunction name: benchmark-build body: (command.BraceGroup children: [(C {<_install>}) (C {<_clean>}) (C {<_dev-build>}) (C {<_release-build>})] ) ) (command.ShFunction name: benchmark-run body: (command.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] ) ] ) ] ) ) (command.ShFunction name: benchmark-run-on-1-machine body: (command.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] ) ] ) ] ) ) (command.ShFunction name: _compressed-tarball body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'name='> (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary op_id: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 op_id: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.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out')} ) ] ) ) (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.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out2')} ) ] ) ) (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$out2')}) ] ) ) (command.ShFunction name: oil body: (command.BraceGroup children: [(C {<_compressed-tarball>} {<oil>} {($ Id.VSub_DollarName '$OIL_VERSION')})] ) ) (command.ShFunction name: hello body: (command.BraceGroup children: [ (C {<_compressed-tarball>} {<hello>} { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<head>} {<-n>} {<1>} {<build/testdata/hello-version.txt>})] ) ) } ) ] ) ) (command.ShFunction name: escape-segments body: (command.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: (command.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: (command.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.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 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'> ] ) ] ) ] ) ) (command.ShFunction name: _git-changelog body: (command.BraceGroup children: [ (C {<_git-changelog-header>} {(DQ ($ Id.VSub_At '$@'))}) (C {<_git-changelog-body>} {(DQ ($ Id.VSub_At '$@'))}) (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 1121 stdin_parts: [<' </table>\n'>] ) ] ) (C {<_html-footer>}) ] ) ) (command.ShFunction name: git-changelog-0.1 body: (command.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.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<../oilshell.org__deploy/release/> ($ Id.VSub_DollarName '$version') </changelog.html> } ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.2.alpha1 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.1.0>} {<release/0.2.alpha1>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.2.0 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.1.0>} {<release/0.2.0>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.3.alpha1 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.2.0>} {<release/0.3.alpha1>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.3.0 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.2.0>} {<release/0.3.0>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.4.0 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.3.0>} {<release/0.4.0>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.5.alpha1 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.4.0>} {<release/0.5.alpha1>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.5.alpha2 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.5.alpha1>} {<release/0.5.alpha2>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: git-changelog-0.5.alpha3 body: (command.BraceGroup children: [ (command.Simple words: [{<_git-changelog>} {<release/0.5.alpha2>} {<release/0.5.alpha3>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/changelog.html>} ) ] ) ] ) ) (command.ShFunction name: html-redirect body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'url='> ($ Id.VSub_Number '$1')}) (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 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'> ] ) ] ) ] ) ) (command.ShFunction name: no-announcement body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 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'> ] ) ] ) ] ) ) (command.ShFunction name: write-no-announcement body: (command.BraceGroup children: [ (command.Simple words: [{<no-announcement>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/announcement.html>} ) ] ) ] ) ) (command.ShFunction name: announcement-0.0 body: (command.BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ </blog/2017/07/23.html>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<../oilshell.org__deploy/release/0.0.0/announcement.html>} ) ] ) ] ) ) (command.ShFunction name: announcement-0.1 body: (command.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.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<../oilshell.org__deploy/release/> ($ Id.VSub_DollarName '$version') </announcement.html> } ) ] ) ] ) ) (command.ShFunction name: announcement-0.2 body: (command.BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ </blog/2017/11/10.html>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/announcement.html>} ) ] ) ] ) ) (command.ShFunction name: announcement-0.3 body: (command.BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ </blog/2017/12/22.html>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/announcement.html>} ) ] ) ] ) ) (command.ShFunction name: announcement-0.4 body: (command.BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ </blog/2018/02/03.html>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/announcement.html>} ) ] ) ] ) ) (command.ShFunction name: announcement-0.5.alpha3 body: (command.BraceGroup children: [ (command.Simple words: [{<html-redirect>} {(SQ </blog/2018/04/30.html>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_release/VERSION/announcement.html>} ) ] ) ] ) ) (command.ShFunction name: _link body: (command.BraceGroup children: [ (C {<ln>} {<-s>} {<-f>} {<-v>} {<--no-target-directory>} {(DQ ($ Id.VSub_At '$@'))}) ] ) ) (command.ShFunction name: compress-txt body: (command.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: (command.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: (command.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: (command.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.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out') </pydeps.txt>} ) ] ) (command.Simple words: [{<build/metrics.sh>} {<linecount-nativedeps>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out') </nativedeps.txt>} ) ] ) (command.Simple words: [{<scripts/count.sh>} {<all>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out') </src.txt>} ) ] ) (command.Simple words: [{<scripts/count.sh>} {<parser>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out') </parser.txt>} ) ] ) (command.Simple words: [{<scripts/count.sh>} {<runtime>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out') </runtime.txt>} ) ] ) (command.Simple words: [{<scripts/count.sh>} {<oil-osh-cloc>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out') </oil-osh-cloc.txt>} ) ] ) ] ) ) (command.ShFunction name: metrics body: (command.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.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out') </pyc-bytes.txt>} ) ] ) (C {<line-counts>} {($ Id.VSub_DollarName '$out') </line-counts>}) (C {<tree>} {($ Id.VSub_DollarName '$out')}) ] ) ) (command.ShFunction name: _copy-path body: (command.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 '$('> command_list: (command.CommandList children: [(C {<dirname>} {($ Id.VSub_DollarName '$dest')})] ) ) } ) (C {<cp>} {<-v>} {($ Id.VSub_DollarName '$src')} {($ Id.VSub_DollarName '$dest')}) ] ) ) (command.ShFunction name: copy-web body: (command.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: (command.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: (command.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: (command.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: (command.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_name: name iter_words: [ (word.BracedTree parts: [ <oil-> ($ Id.VSub_DollarName '$version') <.tar.> (word_part.BracedTuple words:[{<xz>} {<gz>}]) ] ) ] do_arg_iter: F 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 '$('> command_list: (command.CommandList children: [ (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 '$('> command_list: (command.CommandList children: [ (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: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'release_root_dir='> ($ Id.VSub_Number '$1')}) (command.ForEach iter_name: entry iter_words: [{($ Id.VSub_DollarName '$release_root_dir') </> <Id.Lit_Star '*'>}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (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 '$('> command_list: (command.CommandList children: [ (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 '$('> command_list: (command.CommandList children: [ (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.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_tmp/release-meta.txt>} ) ] ) (command.Simple words: [{<sort>} {<-r>} {<_tmp/release-meta.txt>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<_tmp/sorted-releases.txt>} ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (C {<read>} {<date>} {<_>} {<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.Redir op: <Id.Redir_Less '<'> fd: -1 arg_word: {<_tmp/sorted-releases.txt>} ) ] ) ] ) ) (command.ShFunction name: _releases-html-header body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 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'> ] ) ] ) ] ) ) (command.ShFunction name: _html-footer body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 3119 stdin_parts: [<' </body>\n'> <'</html>\n'>] ) ] ) ] ) ) (command.ShFunction name: html-index body: (command.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 op_id: Id.VTest_ColonHyphen arg_word: {<_tmp> <Id.Lit_Slash /> <releases.html>} ) ) } ) (command.BraceGroup children: [ (C {<_releases-html-header>}) (C {<_html-index>} {($ Id.VSub_DollarName '$release_root_dir')}) (C {<_html-footer>}) ] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$out')} ) ] ) (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$out')}) ] ) ) (C {(DQ ($ Id.VSub_At '$@'))}) ] )