(List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub GIT_TEST_GIT_DAEMON]]} ) (List (= scope= flags=0 words=[] bindings=[('skip_all', {[DQ [LIT_CHARS "git-daemon testing disabled (define GIT_TEST_GIT_DAEMON to enable)"]]})]) (Com {[LIT_CHARS test_done]} ) ) ) (= scope= flags=0 words=[] bindings=[('LIB_GIT_DAEMON_PORT', {[VarSub LIB_GIT_DAEMON_PORT test_op=VS_TEST_HYPHEN {[LIT_CHARS "'8121'"]}]})]) (= scope= flags=0 words=[] bindings=[('GIT_DAEMON_PID', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('GIT_DAEMON_DOCUMENT_ROOT_PATH', {[DQ [VarSub PWD]] [LIT_CHARS /repo]})]) (= scope= flags=0 words=[] bindings=[('GIT_DAEMON_URL', {[LIT_CHARS git] [LIT_OTHER ":"] [LIT_CHARS //127.0.0.1] [LIT_OTHER ":"] [VarSub LIB_GIT_DAEMON_PORT]})]) (FunctionDef start_git_daemon [] (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub GIT_DAEMON_PID]]} ) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "start_git_daemon already called"]]} ) ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub GIT_DAEMON_DOCUMENT_ROOT_PATH]]} ) (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS EXIT]} ) (Com {[LIT_CHARS say]} {[DQ [LIT_CHARS "Starting git daemon ..."]]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), > ) (Com {[LIT_CHARS mkfifo]} {[LIT_CHARS git_daemon_output]} ) (Fork (Com {[LIT_CHARS git]} {[LIT_CHARS daemon]} {[LIT_CHARS --listen] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 127.0.0.1]} {[LIT_CHARS --port] [LIT_DBRACKET_LIKE "="] [DQ [VarSub LIB_GIT_DAEMON_PORT]]} {[LIT_CHARS --reuseaddr]} {[LIT_CHARS --verbose]} {[LIT_CHARS --base-path] [LIT_DBRACKET_LIKE "="] [DQ [VarSub GIT_DAEMON_DOCUMENT_ROOT_PATH]]} {[DQ [VarSub @]]} {[DQ [VarSub GIT_DAEMON_DOCUMENT_ROOT_PATH]]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), (FilenameRedirectNode filename={[LIT_CHARS git_daemon_output]} "> 2), > ) ) (= scope= flags=0 words=[] bindings=[('GIT_DAEMON_PID', {[VarSub !]})]) (AndOr OP_AND_IF (List redirects=[(FilenameRedirectNode filename={[LIT_CHARS git_daemon_output]} 7)] (Com {[LIT_CHARS read]} {[LIT_CHARS line]} < (DescriptorRedirectNode target={[LIT_CHARS 7]} 0), > ) (Com {[LIT_CHARS echo]} {[DQ [VarSub line]]} < (DescriptorRedirectNode target={[LIT_CHARS 4]} &"> 1), > ) (Fork (Com {[LIT_CHARS cat]} < (DescriptorRedirectNode target={[LIT_CHARS 7]} 0), (DescriptorRedirectNode target={[LIT_CHARS 4]} &"> 1), > ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS x] [DQ [ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub line]]} {[LIT_OTHER ":"]} {[DQ [\ LIT_ESCAPED_CHAR "\\["][LIT_CHARS "[0-9]*"][\ LIT_ESCAPED_CHAR "\\]"][LIT_CHARS " "][\ LIT_ESCAPED_CHAR "\\("][LIT_CHARS ".*"][\ LIT_ESCAPED_CHAR "\\)"]]})]]} {[LIT_NEQUAL "!="]} {[LIT_CHARS x] [DQ [LIT_CHARS "Ready to rumble"]]} ) (List (Com {[LIT_CHARS kill]} {[DQ [VarSub GIT_DAEMON_PID]]} ) (Com {[LIT_CHARS wait]} {[DQ [VarSub GIT_DAEMON_PID]]} ) (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS EXIT]} ) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "git daemon failed to start"]]} ) ) ) ) ) ) (FunctionDef stop_git_daemon [] (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub GIT_DAEMON_PID]]} ) (Com {[LIT_CHARS return]} ) ) (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS EXIT]} ) (Com {[LIT_CHARS say]} {[DQ [LIT_CHARS "Stopping git daemon ..."]]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), > ) (Com {[LIT_CHARS kill]} {[DQ [VarSub GIT_DAEMON_PID]]} ) (Com {[LIT_CHARS wait]} {[DQ [VarSub GIT_DAEMON_PID]]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), (DescriptorRedirectNode target={[LIT_CHARS 4]} &"> 2), > ) (= scope= flags=0 words=[] bindings=[('ret', {[VarSub ?]})]) (If (Com {[LIT_CHARS test]} {[VarSub ret]} {[LIT_CHARS -ne]} {[LIT_CHARS 143]} ) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "git daemon exited with status: "][VarSub ret]]} ) ) (= scope= flags=0 words=[] bindings=[('GIT_DAEMON_PID', {[SQ ]})]) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS git_daemon_output]} ) ) ) )