(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: (Token id:Id.Left_DollarParen val:'$(' span_id:110) 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: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:145) 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: (Token id:Id.VSub_Number val:1 span_id:704) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(hello)}) ) } ) (C {(local)} {(Id.Lit_VarLike 'version=') (braced_var_sub token: (Token id:Id.VSub_Number val:2 span_id:714) 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: (Token id:Id.Redir_Great val:'>' span_id:771) 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: (Token id:Id.Redir_Great val:'>' span_id:806) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:847) 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 (Token id:Id.Lit_Chars val:'\n' span_id:887) (Token id:Id.Lit_Chars val:'import cgi, re, sys\n' span_id:888) (Token id:Id.Lit_Chars val:'\n' span_id:889) (Token id:Id.Lit_Chars val:'print re.sub(\n' span_id:890) (Token id:Id.Lit_Chars val:' r"\\x00(.*)\\x01", \n' span_id:891) (Token id:Id.Lit_Chars val:' lambda match: cgi.escape(match.group(1)),\n' span_id:892) (Token id:Id.Lit_Chars val:' sys.stdin.read())\n' span_id:893) ) } ) ] ) ) (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 (Token id:Id.Lit_Chars val:'<tr>\n' span_id:944) (Token id: Id.Lit_Chars val: ' <td><a class="checksum"\n' span_id: 945 ) (Token id: Id.Lit_Chars val: ' href="https://github.com/oilshell/oil/commit/%H">%h</a>\n' span_id: 946 ) (Token id:Id.Lit_Chars val:' </td>\n' span_id:947) (Token id: Id.Lit_Chars val: ' <td class="date">%ad</td>\n' span_id: 948 ) (Token id:Id.Lit_Chars val:' <td>%x00%an%x01</td>\n' span_id:949) (Token id: Id.Lit_Chars val: ' <td class="subject">%x00%s%x01</td>\n' span_id: 950 ) (Token id:Id.Lit_Chars val:' </tr>' span_id:951) ) } ) (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: (Token id:Id.Redir_DLess val:'<<' span_id:1015) 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: (Token id:Id.Redir_DLess val:'<<' span_id:1116) 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 (Token id:Id.Lit_Chars val:0.1.0 span_id:1139))} ) (command.Simple words: [{(_git-changelog)} {(release/0.0.0)} {(release/0.1.0)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1151) 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: (Token id:Id.Redir_Great val:'>' span_id:1175) 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: (Token id:Id.Redir_Great val:'>' span_id:1197) 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: (Token id:Id.Redir_Great val:'>' span_id:1219) 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: (Token id:Id.Redir_Great val:'>' span_id:1241) 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: (Token id:Id.Redir_Great val:'>' span_id:1263) 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: (Token id:Id.Redir_Great val:'>' span_id:1285) 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: (Token id:Id.Redir_Great val:'>' span_id:1310) 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: (Token id:Id.Redir_Great val:'>' span_id:1332) 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: (Token id:Id.Redir_DLess val:'<<' span_id:1358) 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: (Token id:Id.Redir_DLess val:'<<' span_id:1399) 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: (Token id:Id.Redir_Great val:'>' span_id:1424) fd: -1 arg_word: {(_release/VERSION/announcement.html)} ) ] ) ] ) ) (command.ShFunction name: announcement-0.0 body: (command.BraceGroup children: [ (command.Simple words: [ {(html-redirect)} {(SQ (Token id:Id.Lit_Chars val:/blog/2017/07/23.html span_id:1441))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1446) 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 (Token id:Id.Lit_Chars val:0.1.0 span_id:1464))} ) (command.Simple words: [ {(html-redirect)} {(SQ (Token id:Id.Lit_Chars val:/blog/2017/09/09.html span_id:1471))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1476) 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 (Token id:Id.Lit_Chars val:/blog/2017/11/10.html span_id:1495))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1498) fd: -1 arg_word: {(_release/VERSION/announcement.html)} ) ] ) ] ) ) (command.ShFunction name: announcement-0.3 body: (command.BraceGroup children: [ (command.Simple words: [ {(html-redirect)} {(SQ (Token id:Id.Lit_Chars val:/blog/2017/12/22.html span_id:1515))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1518) fd: -1 arg_word: {(_release/VERSION/announcement.html)} ) ] ) ] ) ) (command.ShFunction name: announcement-0.4 body: (command.BraceGroup children: [ (command.Simple words: [ {(html-redirect)} {(SQ (Token id:Id.Lit_Chars val:/blog/2018/02/03.html span_id:1539))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1542) 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 (Token id:Id.Lit_Chars val:/blog/2018/04/30.html span_id:1559))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1562) 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: (Token id:Id.Redir_Great val:'>' span_id:2028) fd: -1 arg_word: {($ Id.VSub_DollarName '$out') (/pydeps.txt)} ) ] ) (command.Simple words: [{(build/metrics.sh)} {(linecount-nativedeps)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2038) fd: -1 arg_word: {($ Id.VSub_DollarName '$out') (/nativedeps.txt)} ) ] ) (command.Simple words: [{(scripts/count.sh)} {(all)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2053) fd: -1 arg_word: {($ Id.VSub_DollarName '$out') (/src.txt)} ) ] ) (command.Simple words: [{(scripts/count.sh)} {(parser)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2071) fd: -1 arg_word: {($ Id.VSub_DollarName '$out') (/parser.txt)} ) ] ) (command.Simple words: [{(scripts/count.sh)} {(runtime)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2081) fd: -1 arg_word: {($ Id.VSub_DollarName '$out') (/runtime.txt)} ) ] ) (command.Simple words: [{(scripts/count.sh)} {(oil-osh-cloc)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2092) 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: (Token id:Id.Redir_Great val:'>' span_id:2125) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:2166) 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: (Token id:Id.Lit_EscapedChar val:'\\(' span_id:2197) ) } {(-name)} {(_tmp)} {(-a)} {(-prune)} { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\)' span_id:2207) ) } {(-o)} {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\(' span_id:2213))} {(-name)} {(SQ (Token id:Id.Lit_Chars val:'*.css' span_id:2218))} {(-o)} {(-name)} {(SQ (Token id:Id.Lit_Chars val:'*.js' span_id:2226))} { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\)' span_id:2229) ) } {(-a)} {(-printf)} {(SQ (Token id:Id.Lit_Chars val:'%p _release/VERSION/%p\\n' span_id:2236))} ) (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 (Token id:Id.Lit_Chars val:../oilshell.org__deploy span_id:2393)) } ) (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 (Token id:Id.Lit_Chars val:../oilshell.org__deploy/download/ span_id:2498)) } ) (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 (Token id:Id.Lit_Chars val:'<table class="file-table">' span_id:2587))}) (C {(echo)} { (SQ (Token id: Id.Lit_Chars val: '<tr><thead> <td>File</td> <td>Size</td> <td>SHA256 Checksum</td> </thead></tr>' span_id: 2594 ) ) } ) (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: (Token id:Id.Left_DollarParen val:'$(' span_id:2640) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(sha256sum)} {($ Id.VSub_DollarName '$path')}) (C {(awk)} {(SQ (Token id:Id.Lit_Chars val:'{print $1}' span_id:2650))} ) ] negated: F ) ] ) ) } ) (C {(local)} {(Id.Lit_VarLike 'size=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2658) command_list: (command.CommandList children: [ (C {(stat)} {(--format)} {(SQ (Token id:Id.Lit_Chars val:'%s' span_id:2664))} {($ Id.VSub_DollarName '$path')} ) ] ) ) } ) (C {(echo)} { (SQ (Token id: Id.Lit_Chars val: '<tr> <td class="filename"><a href="' span_id: 2680 ) ) ($ Id.VSub_DollarName '$url') (SQ (Token id:Id.Lit_Chars val:'">' span_id:2684)) ($ Id.VSub_DollarName '$name') (SQ (Token id:Id.Lit_Chars val:'</a></td>\n' span_id:2688) (Token id: Id.Lit_Chars val: ' <td class="size">' span_id: 2689 ) ) ($ Id.VSub_DollarName '$size') (SQ (Token id:Id.Lit_Chars val:'</td>\n' span_id:2693) (Token id: Id.Lit_Chars val: ' <td class="checksum">' span_id: 2694 ) ) ($ Id.VSub_DollarName '$checksum') (SQ (Token id:Id.Lit_Chars val:'</td>\n' span_id:2698) (Token id: Id.Lit_Chars val: ' </tr>' span_id: 2699 ) ) } ) ] ) ) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:'</table>' span_id:2709))}) ] ) ) (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: (Token id:Id.Op_Semi val:';' span_id:2810) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2815) ) ] spids: [2801 2812] ) ] ) (C {(local)} {(Id.Lit_VarLike 'dir=') ($ Id.VSub_DollarName '$entry')}) (C {(local)} {(Id.Lit_VarLike 'version=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2831) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:2846) 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: (Token id:Id.Redir_Great val:'>' span_id:2901) fd: -1 arg_word: {(_tmp/release-meta.txt)} ) ] ) (command.Simple words: [{(sort)} {(-r)} {(_tmp/release-meta.txt)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2917) fd: -1 arg_word: {(_tmp/sorted-releases.txt)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:2923) cond: [ (command.Sentence child: (C {(read)} {(date)} {(_)} {(version)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2932) ) ] body: (command.DoGroup children: [ (C {(log)} {(DQ ('Release Date: ') ($ Id.VSub_DollarName '$date'))}) (C {(log)} {(DQ ('Version: ') ($ Id.VSub_DollarName '$version'))}) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:'<a name="' span_id:2961)) ($ Id.VSub_DollarName '$version') (SQ (Token id:Id.Lit_Chars val:'"></a>' span_id:2965)) } ) (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 (Token id: Id.Lit_Chars val: '<p> <a href="release/' span_id: 2996 ) ) ($ Id.VSub_DollarName '$version') (SQ (Token id: Id.Lit_Chars val: '/announcement.html">Release Announcement</a>\n' span_id: 3000 ) (Token id:Id.Lit_Chars val:' | <a href="release/' span_id:3001) ) ($ Id.VSub_DollarName '$version') (SQ (Token id: Id.Lit_Chars val: '/doc/INSTALL.html">INSTALL</a>\n' span_id: 3005 ) (Token id:Id.Lit_Chars val:' | <a href="release/' span_id:3006) ) ($ Id.VSub_DollarName '$version') (SQ (Token id:Id.Lit_Chars val:'/">Docs and Details</a>\n' span_id:3010) (Token id: Id.Lit_Chars val: ' </p>' span_id: 3011 ) ) } ) (C {(_release-files-html)} {($ Id.VSub_DollarName '$version')}) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:3023) 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: (Token id:Id.Redir_DLess val:'<<' span_id:3039) 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: (Token id:Id.Redir_DLess val:'<<' span_id:3113) 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: (Token id:Id.VSub_Number val:2 span_id:3140) 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: (Token id:Id.Redir_Great val:'>' span_id:3164) fd: -1 arg_word: {($ Id.VSub_DollarName '$out')} ) ] ) (C {(ls)} {(-l)} {($ Id.VSub_DollarName '$out')}) ] ) ) (C {(DQ ($ Id.VSub_At '$@'))}) ] )