(List (Com {[LIT_CHARS set]} {[LIT_CHARS -eu]}) (= scope= flags=0 words=[] bindings=[('SCRIPT_DIR', {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub BASH_SOURCE bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}})]]})]]}) (Com {[LIT_CHARS pwd]}) )]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[VarSub SCRIPT_DIR] [LIT_CHARS /testenv.sh]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "testenv.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[VarSub SCRIPT_DIR] [LIT_CHARS /common.sh]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "common.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[] bindings=[('RELEASE_SCRIPT', {[VarSub SCRIPT_DIR] [LIT_CHARS /release.sh]})]) (= scope= flags=0 words=[] bindings=[('GERRIT_ROOT', {[VarSub TEST_TMPDIR] [LIT_CHARS /git/gerrit]})]) (= scope= flags=0 words=[] bindings=[('GITHUB_ROOT', {[VarSub TEST_TMPDIR] [LIT_CHARS /git/github]})]) (= scope= flags=0 words=[] bindings=[('WORKSPACE', {[VarSub TEST_TMPDIR] [LIT_CHARS /git/workspace]})]) (= scope= flags=1 words=[] bindings=[('RELEASE_REPOSITORIES', {[DQ [VarSub GITHUB_ROOT]]})]) (= scope= flags=1 words=[] bindings=[('MASTER_REPOSITORIES', {[DQ [VarSub GITHUB_ROOT][LIT_CHARS " "][VarSub GERRIT_ROOT]]})]) (Com {[LIT_CHARS setup_git_repository]}) (FunctionDef set_up [] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -fr]} {[VarSub GERRIT_ROOT]} {[VarSub GITHUB_ROOT]} {[VarSub WORKSPACE]}) (Com {[LIT_CHARS git]} {[LIT_CHARS clone]} {[LIT_CHARS -l]} {[LIT_CHARS --bare]} {[LIT_CHARS -q]} {[VarSub MASTER_ROOT]} {[VarSub GERRIT_ROOT]}) (Com {[LIT_CHARS git]} {[LIT_CHARS clone]} {[LIT_CHARS -l]} {[LIT_CHARS --bare]} {[LIT_CHARS -q]} {[VarSub MASTER_ROOT]} {[VarSub GITHUB_ROOT]}) (Com {[LIT_CHARS git]} {[LIT_CHARS clone]} {[LIT_CHARS -l]} {[LIT_CHARS -q]} {[VarSub GERRIT_ROOT]} {[VarSub WORKSPACE]}) (Com {[LIT_CHARS cd]} {[VarSub WORKSPACE]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS .git/config]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "[user]\n"][LIT_CHARS " name = Bazel tests\n"][LIT_CHARS " email = noreply@google.com\n"]]} 0), > ) ) ) (FunctionDef create [] (List (= scope= flags=0 words=[] bindings=[('old_branch', {[ComSub (Com {[LIT_CHARS git_get_branch]})]})]) (Fork (Com {[VarSub RELEASE_SCRIPT]} {[LIT_CHARS create]} {[VarSub @]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Failed to cut release "][VarSub 1][LIT_CHARS " at commit "][VarSub 2]]}) ) (= scope= flags=0 words=[] bindings=[('new_branch', {[ComSub (Com {[LIT_CHARS git_get_branch]})]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub old_branch]]} {[DQ [VarSub new_branch]]}) (Com {[LIT_CHARS assert_contains]} {[DQ [LIT_CHARS "Created "][VarSub 1][LIT_CHARS ".* on branch release-"][VarSub 1][LIT_CHARS .]]} {[VarSub TEST_log]}) (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[DQ [LIT_CHARS release-][VarSub 1]]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) ) ) (FunctionDef push [] (List (= scope= flags=0 words=[] bindings=[('branch', {[DQ [LIT_CHARS release-][VarSub 1]]})]) (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[DQ [VarSub branch]]}) (AndOr OP_OR_IF (Com {[VarSub RELEASE_SCRIPT]} {[LIT_CHARS push]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Failed to push release branch "][VarSub branch]]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS branch]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_log]} {[DQ [VarSub branch]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GERRIT_ROOT]} {[LIT_CHARS branch]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[DQ [VarSub branch]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[VarSub branch]})]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[VarSub branch]})]]}) ) ) (FunctionDef release [] (List (= scope= flags=0 words=[] bindings=[('tag', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('branch', {[ComSub (Com {[LIT_CHARS git_get_branch]})]})]) (= scope= flags=0 words=[] bindings=[('changelog', {[ComSub (Com {[LIT_CHARS cat]} {[LIT_CHARS CHANGELOG.md]})]})]) (= scope= flags=0 words=[] bindings=[('commit', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[VarSub branch]})]})]) (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS echo]} {[LIT_CHARS y]}) (Com {[VarSub RELEASE_SCRIPT]} {[LIT_CHARS release]}) ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Failed to release "][VarSub branch]]}) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS master]} {[DQ [ComSub (Com {[LIT_CHARS git_get_branch]})]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS tag]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_log]} {[VarSub tag]}) (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS tag]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_log]} {[VarSub tag]}) (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GERRIT_ROOT]} {[LIT_CHARS tag]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[VarSub tag]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub commit]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[VarSub tag]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub commit]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[LIT_CHARS master]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub commit]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[VarSub tag]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub commit]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[LIT_CHARS master]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub commit]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GERRIT_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS B]} {[LIT_CHARS master]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[VarSub tag] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS master] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS show]} {[VarSub tag] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS master] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GERRIT_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS master] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) ) ) (FunctionDef abandon [] (List (= scope= flags=0 words=[] bindings=[('tag', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('branch', {[DQ [LIT_CHARS release-][VarSub tag]]})]) (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[DQ [VarSub branch]]}) (= scope= flags=0 words=[] bindings=[('changelog', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS master] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]})]) (= scope= flags=0 words=[] bindings=[('master_sha1', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS master]})]})]) (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS echo]} {[LIT_CHARS y]}) (Com {[VarSub RELEASE_SCRIPT]} {[LIT_CHARS abandon]}) ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Failed to abandon release "][VarSub branch]]}) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS master]} {[DQ [ComSub (Com {[LIT_CHARS git_get_branch]})]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS tag]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[VarSub tag]}) (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS tag]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[VarSub tag]}) (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GERRIT_ROOT]} {[LIT_CHARS tag]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[VarSub tag]}) (Com {[LIT_CHARS git]} {[LIT_CHARS branch]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[VarSub branch]}) (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS branch]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_not_log]} {[VarSub branch]}) (Com {[LIT_CHARS assert_equals]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS master]})]]} {[DQ [VarSub master_sha1]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS master] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GITHUB_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS master] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub changelog]]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --git-dir] [LIT_OTHER "="] [VarSub GERRIT_ROOT]} {[LIT_CHARS show]} {[LIT_CHARS master] [LIT_OTHER ":"] [LIT_CHARS CHANGELOG.md]})]]}) ) ) (FunctionDef test_release_workflow [] (List (= scope= flags=1 words=[] bindings=[('EDITOR', {[LIT_CHARS true]})]) (Com {[LIT_CHARS create]} {[LIT_CHARS v0]} {[LIT_CHARS 965c392]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Release v0"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Initial release"]]}) (Com {[LIT_CHARS push]} {[LIT_CHARS v0]}) (Com {[LIT_CHARS release]} {[LIT_CHARS v0]}) (= scope= flags=1 words=[] bindings=[('EDITOR', {[VarSub TEST_TMPDIR] [LIT_CHARS /editor.sh]})]) (= scope= flags=0 words=[] bindings=[('RELNOTES', {[SQ ]})]) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /expected.log]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "# Editing release notes\n"][LIT_CHARS "# Modify the release notes to make them suitable for the release.\n"][LIT_CHARS "# Every line starting with a # will be removed as well as every\n"][LIT_CHARS "# empty line at the start and at the end.\n"][LIT_CHARS "\n"][LIT_CHARS "# Release v1 ("][ComSub (Com {[LIT_CHARS date]} {[LIT_OTHER "+"] [LIT_OTHER "%"] [LIT_CHARS Y-] [LIT_OTHER "%"] [LIT_CHARS m-] [LIT_OTHER "%"] [LIT_CHARS d]})][LIT_CHARS ")\n"][LIT_CHARS "\n"][VarSub RELNOTES][LIT_CHARS "\n"][LIT_CHARS "\n"]]} 0), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Test replacement"]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /replacement.log]} "> 1), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[VarSub EDITOR]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/bin/bash\n"][LIT_CHARS "\n"][LIT_CHARS "# 1. Assert the file is correct\n"][LIT_CHARS "if [ "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "(cat "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "1)"][RIGHT_D_QUOTE "\""][LIT_CHARS " != "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "(cat "][VarSub TEST_TMPDIR][LIT_CHARS "/expected.log)"][RIGHT_D_QUOTE "\""][LIT_CHARS " ]; then\n"][LIT_CHARS " echo "][RIGHT_D_QUOTE "\""][LIT_CHARS "Expected:"][RIGHT_D_QUOTE "\""][LIT_CHARS " >&2\n"][LIT_CHARS " cat "][VarSub TEST_TMPDIR][LIT_CHARS "/expected.log >&2\n"][LIT_CHARS " echo "][RIGHT_D_QUOTE "\""][LIT_CHARS "Got:"][RIGHT_D_QUOTE "\""][LIT_CHARS " >&2\n"][LIT_CHARS " cat "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "1 >&2\n"][LIT_CHARS " exit 1\n"][LIT_CHARS "fi\n"][LIT_CHARS "\n"][LIT_CHARS "# 2. write the replacement in the input file\n"][LIT_CHARS "cat "][VarSub TEST_TMPDIR][LIT_CHARS "/replacement.log >"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "1\n"]]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[VarSub EDITOR]}) (Com {[LIT_CHARS create]} {[LIT_CHARS v1]} {[LIT_CHARS 1170dc6]} {[LIT_CHARS 0540fde]}) (= scope= flags=0 words=[] bindings=[('header', {[SQ ] [ComSub (Com {[LIT_CHARS date]} {[LIT_OTHER "+"] [LIT_OTHER "%"] [LIT_CHARS Y-] [LIT_OTHER "%"] [LIT_CHARS m-] [LIT_OTHER "%"] [LIT_CHARS d]})] [SQ ]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub header][LIT_CHARS "Test replacement"]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub TEST_log]})]]}) (Com {[LIT_CHARS push]} {[LIT_CHARS v1]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "#!"][ComSub (Com {[LIT_CHARS which]} {[LIT_CHARS true]})]]} < (FilenameRedirectNode filename={[VarSub EDITOR]} "> 1), > ) (Com {[LIT_CHARS create]} {[LIT_CHARS v1]} {[LIT_CHARS 1170dc6]} {[LIT_CHARS 0540fde]} {[LIT_CHARS cef25c4]}) (= scope= flags=0 words=[] bindings=[('header', {[SQ ] [ComSub (Com {[LIT_CHARS date]} {[LIT_OTHER "+"] [LIT_OTHER "%"] [LIT_CHARS Y-] [LIT_OTHER "%"] [LIT_CHARS m-] [LIT_OTHER "%"] [LIT_CHARS d]})] [SQ ]})]) (= scope= flags=0 words=[] bindings=[('RELNOTES', {[DQ [VarSub RELNOTES]] [SQ ]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub header][VarSub RELNOTES]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub TEST_log]})]]}) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 2]} {[DQ [ComSub (Com {[LIT_CHARS get_release_candidate]})]]}) (Com {[LIT_CHARS push]} {[LIT_CHARS v1]}) (Com {[LIT_CHARS release]} {[LIT_CHARS v1]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[VarSub EDITOR]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/bin/bash\n"][LIT_CHARS "# Make sure we have release notes or the release will be cancelled.\n"][LIT_CHARS "echo 'Dummy release' >"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "1\n"]]} 0), > ) (Com {[LIT_CHARS create]} {[LIT_CHARS v2]} {[LIT_CHARS 2464526]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Release v2"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Baseline: 2464526"]]}) (Com {[LIT_CHARS abandon]} {[LIT_CHARS v2]}) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "echo HOOK-SHOULD-BE-IGNORED >>$1\n"]} 0), (FilenameRedirectNode filename={[LIT_CHARS .git/hooks/commit-msg]} "> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[LIT_CHARS .git/hooks/commit-msg]}) (Com {[LIT_CHARS create]} {[LIT_CHARS v2]} {[LIT_CHARS 2464526]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Release v2"]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS "Baseline: 2464526"]]}) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS HOOK-SHOULD-BE-IGNORED]]}) (Com {[LIT_CHARS push]} {[LIT_CHARS v2]}) (Com {[LIT_CHARS abandon]} {[LIT_CHARS v2]}) ) ) (Com {[LIT_CHARS run_suite]} {[DQ [LIT_CHARS "Release tests"]]}) )