(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PERL) op: assign_op.Equal rhs: {(SQ <'@@PERL@@'>)} spids: [13] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTIONS_KEEPDASHDASH) op: assign_op.Equal rhs: (word.Empty) spids: [18] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTIONS_STUCKLONG) op: assign_op.Equal rhs: (word.Empty) spids: [20] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTIONS_SPEC) op: assign_op.Equal rhs: { (DQ <'git instaweb [options] (--start | --stop | --restart)\n'> <'--\n'> <'l,local only bind on 127.0.0.1\n'> <'p,port= the port to bind to\n'> <'d,httpd= the command to launch\n'> <'b,browser= the browser to launch\n'> <'m,module-path= the module path (only needed for apache2)\n'> <' Action\n'> <'stop stop the web server\n'> <'start start the web server\n'> <'restart restart the web server\n'> ) } spids: [22] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUBDIRECTORY_OK) op: assign_op.Equal rhs: {<Yes>} spids: [39] ) ] ) (C {<.>} {<git-sh-setup>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fqgitdir) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} spids: [47] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:local) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<git>} {<config>} {<--bool>} {<--get>} {<instaweb.local>})] ) ) ) } spids: [52] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:httpd) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<git>} {<config>} {<--get>} {<instaweb.httpd>})] ) ) ) } spids: [67] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:root) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<git>} {<config>} {<--get>} {<instaweb.gitwebdir>})] ) ) ) } spids: [80] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:port) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<git>} {<config>} {<--get>} {<instaweb.port>})] ) ) } spids: [93] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module_path) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<git>} {<config>} {<--get>} {<instaweb.modulepath>})] ) ) ) } spids: [104] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:action) op: assign_op.Equal rhs: {(DQ <browse>)} spids: [117] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:conf) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$GIT_DIR') </gitweb/httpd.conf>)} spids: [123] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$httpd'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:httpd) op: assign_op.Equal rhs: {(SQ <'lighttpd -f'>)} spids: [147] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$root'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:root) op: assign_op.Equal rhs: {(SQ <'@@GITWEBDIR@@'>)} spids: [166] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$port'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:port) op: assign_op.Equal rhs: {<1234>} spids: [185] ) ] ) ] ) (command.ShFunction name: resolve_full_httpd body: (command.BraceGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$httpd'))} arms: [ (case_arm pat_list: [ {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>} {<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>} {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>} ] action: [ (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$httpd'))}) (command.Simple words: [{<sane_grep>} {<-->} {(SQ <'-f *$'>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {</dev/null>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) ] negated: T ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:httpd) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$httpd') <' -f'>)} spids: [258] ) ] ) ] spids: [228 255] ) ] ) ] spids: [206 217 268 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:full_httpd) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb.psgi>)} spids: [281] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:httpd_only) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name httpd> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>}) ) ) } spids: [288] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] spids: [271 274 304 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'> <webrick> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:full_httpd) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/webrick.rb>)} spids: [321] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:httpd_only) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name httpd> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>}) ) ) } spids: [328] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] spids: [307 310 344 -1] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:httpd_only) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$httpd')}) (C {<cut>} {<-f1>} {<-d> (SQ <' '>)}) ] negated: F ) ] ) ) ) } spids: [351] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$httpd_only'))} arms: [ (case_arm pat_list: [{</> <Id.Lit_Star '*'>}] action: [(C {<Id.Lit_Other ':'>})] spids: [382 384 388 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (command.Simple words: [{<which>} {($ Id.VSub_DollarName '$httpd_only')}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {</dev/null>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) ] spids: [390 391 402 -1] ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:full_httpd) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$httpd')} spids: [410] ) ] ) ] spids: [372 407] ) ] else_action: [ (command.ForEach iter_name: i iter_words: [ {</usr/local/sbin>} {</usr/sbin>} {(DQ ($ Id.VSub_DollarName '$root'))} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb>)} ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (C {<test>} {<-x>} { (DQ ($ Id.VSub_DollarName '$i') </> ($ Id.VSub_DollarName '$httpd_only') ) } ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:full_httpd) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$i') </> ($ Id.VSub_DollarName '$httpd') } spids: [472] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> ) ] spids: [456 469] ) ] ) ] ) ) (command.Simple words: [ {<echo>} { (DQ ($ Id.VSub_DollarName '$httpd_only') <' not found. Install '> ($ Id.VSub_DollarName '$httpd_only') <' or use'> ) } {(DQ <'--httpd to specify another httpd daemon.'>)} ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ] ) ) (command.ShFunction name: start_httpd body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)}) terminator: <Id.Op_Semi _> ) ] action: [ (C {<say>} {(DQ <'Instance already running. Restarting...'>)}) (C {<stop_httpd>}) ] spids: [525 537] ) ] ) (C {<resolve_full_httpd>}) (C {<mkdir>} {<-p>} { (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only')) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:conf) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') <.conf> ) } spids: [572] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$conf'))}) (C {<configure_httpd>}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb_config.perl>)}) (C {<gitweb_conf>}) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$httpd'))} arms: [ (case_arm pat_list: [ {<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>} {<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>} ] action: [ (command.Sentence child: (C {($ Id.VSub_DollarName '$full_httpd')} {(DQ ($ Id.VSub_DollarName '$conf'))}) terminator: <Id.Op_Amp _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pid) op: assign_op.Equal rhs: {($ Id.VSub_Bang '$!')} spids: [654] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {($ Id.VSub_QMark '$?')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName '$httpd') <.> ) } ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [659 671] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 707 stdin_parts: [($ Id.VSub_DollarName '$pid') <'\n'>] ) ] ) ] spids: [627 634 709 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (C {($ Id.VSub_DollarName '$full_httpd')} {(DQ ($ Id.VSub_DollarName '$conf'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {($ Id.VSub_QMark '$?')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName '$httpd') <.> ) } ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [723 735] ) ] ) ] spids: [712 713 755 -1] ) ] ) ] ) ) (command.ShFunction name: stop_httpd body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)}) (C {<kill>} { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<cat>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)})] ) ) } ) ] ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)}) ] ) ) (command.ShFunction name: httpd_is_ready body: (command.BraceGroup children: [ (C {(DQ ($ Id.VSub_DollarName '$PERL'))} {<-MIO> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <Socket> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <INET> } {<-e>} { (DQ <'\n'> <'local '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'| = 1; # turn on autoflush\n'> <"exit if (IO::Socket::INET->new('127.0.0.1:"> ($ Id.VSub_DollarName '$port') <"'));\n"> <"print 'Waiting for "> <Id.Lit_Other '\\'> <"'"> ($ Id.VSub_DollarName '$httpd') <Id.Lit_Other '\\'> <"' to start ..';\n"> <'do {\n'> <"\tprint '.';\n"> <'\tsleep(1);\n'> <"} until (IO::Socket::INET->new('127.0.0.1:"> ($ Id.VSub_DollarName '$port') <"'));\n"> <'print qq! (done)'> <Id.Lit_Other '\\'> <'n!;\n'> ) } ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(C {<test>} {($ Id.VSub_Pound '$#')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>})] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{<--stop>} {<stop>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:action) op: assign_op.Equal rhs: {(DQ <stop>)} spids: [885] ) ] ) ] spids: [879 882 891 -1] ) (case_arm pat_list: [{<--start>} {<start>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:action) op: assign_op.Equal rhs: {(DQ <start>)} spids: [900] ) ] ) ] spids: [894 897 906 -1] ) (case_arm pat_list: [{<--restart>} {<restart>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:action) op: assign_op.Equal rhs: {(DQ <restart>)} spids: [915] ) ] ) ] spids: [909 912 921 -1] ) (case_arm pat_list: [{<-l>} {<--local>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:local) op: assign_op.Equal rhs: {<true>} spids: [930] ) ] ) ] spids: [924 927 934 -1] ) (case_arm pat_list: [{<-d>} {<--httpd>}] action: [ (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:httpd) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [946] ) ] ) ] spids: [937 940 952 -1] ) (case_arm pat_list: [{<-b>} {<--browser>}] action: [ (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:browser) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [964] ) ] ) ] spids: [955 958 970 -1] ) (case_arm pat_list: [{<-p>} {<--port>}] action: [ (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:port) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [982] ) ] ) ] spids: [973 976 988 -1] ) (case_arm pat_list: [{<-m>} {<--module-path>}] action: [ (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module_path) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1000] ) ] ) ] spids: [991 994 1006 -1] ) (case_arm pat_list:[{<-->}] spids:[1009 1010 1013 -1]) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<usage>})] spids: [1016 1017 1023 -1] ) ] ) (C {<shift>}) ] ) ) (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$GIT_DIR') </gitweb/tmp>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXEC_PATH) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children:[(C {<git>} {<--exec-path>})]) ) ) } spids: [1043] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir'))} spids: [1052] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GITWEB_CONFIG) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb_config.perl>)} spids: [1057] ) ] ) (C {<export>} {<GIT_EXEC_PATH>} {<GIT_DIR>} {<GITWEB_CONFIG>}) (command.ShFunction name: webrick_conf body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:wrapper) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd') </wrapper.sh> ) } spids: [1092] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$wrapper'))} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 1128 stdin_parts: [ <'#!@SHELL_PATH@\n'> <'# we use this shell script wrapper around the real gitweb.cgi since\n'> <'# there appears to be no other way to pass arbitrary environment variables\n'> <'# into the CGI process\n'> <'GIT_EXEC_PATH='> ($ Id.VSub_DollarName '$GIT_EXEC_PATH') <' GIT_DIR='> ($ Id.VSub_DollarName '$GIT_DIR') <' GITWEB_CONFIG='> ($ Id.VSub_DollarName '$GITWEB_CONFIG') <'\n'> <'export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG\n'> <'exec '> ($ Id.VSub_DollarName '$root') <'/gitweb.cgi\n'> ] ) ] ) (C {<chmod>} {<Id.Lit_Other '+'> <x>} {(DQ ($ Id.VSub_DollarName '$wrapper'))}) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: { (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd') <.rb> ) } ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 1226 stdin_parts: [ <'#!/usr/bin/env ruby\n'> <"require 'webrick'\n"> <"require 'logger'\n"> <'options = {\n'> <' :Port => '> ($ Id.VSub_DollarName '$port') <',\n'> <' :DocumentRoot => '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$root') <Id.Right_DoubleQuote '"'> <',\n'> <" :Logger => Logger.new('"> ($ Id.VSub_DollarName '$fqgitdir') <"/gitweb/error.log'),\n"> <' :AccessLog => [\n'> <" [ Logger.new('"> ($ Id.VSub_DollarName '$fqgitdir') <"/gitweb/access.log'),\n"> <' WEBrick::AccessLog::COMBINED_LOG_FORMAT ]\n'> <' ],\n'> <' :DirectoryIndex => ['> <Id.Right_DoubleQuote '"'> <gitweb.cgi> <Id.Right_DoubleQuote '"'> <'],\n'> <' :CGIInterpreter => '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$wrapper') <Id.Right_DoubleQuote '"'> <',\n'> <' :StartCallback => lambda do\n'> <' File.open('> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </pid> <Id.Right_DoubleQuote '"'> <', '> <Id.Right_DoubleQuote '"'> <w> <Id.Right_DoubleQuote '"'> <') { |f| f.puts Process.pid }\n'> <' end,\n'> <' :ServerType => WEBrick::Daemon,\n'> <'}\n'> <"options[:BindAddress] = '127.0.0.1' if "> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$local') <Id.Right_DoubleQuote '"'> <' == '> <Id.Right_DoubleQuote '"'> <true> <Id.Right_DoubleQuote '"'> <'\n'> <'server = WEBrick::HTTPServer.new(options)\n'> <"['INT', 'TERM'].each do |signal|\n"> <' trap(signal) {server.shutdown}\n'> <'end\n'> <'server.start\n'> ] ) ] ) (C {<chmod>} {<Id.Lit_Other '+'> <x>} { (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd') <.rb>) } ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$conf'))}) ] ) ) (command.ShFunction name: lighttpd_conf body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 1821 stdin_parts: [ <'server.document-root = '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$root') <Id.Right_DoubleQuote '"'> <'\n'> <'server.port = '> ($ Id.VSub_DollarName '$port') <'\n'> <'server.modules = ( '> <Id.Right_DoubleQuote '"'> <mod_setenv> <Id.Right_DoubleQuote '"'> <', '> <Id.Right_DoubleQuote '"'> <mod_cgi> <Id.Right_DoubleQuote '"'> <' )\n'> <'server.indexfiles = ( '> <Id.Right_DoubleQuote '"'> <gitweb.cgi> <Id.Right_DoubleQuote '"'> <' )\n'> <'server.pid-file = '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </pid> <Id.Right_DoubleQuote '"'> <'\n'> <'server.errorlog = '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') </error.log> <Id.Right_DoubleQuote '"'> <'\n'> <'\n'> <'# to enable, add '> <Id.Right_DoubleQuote '"'> <mod_access> <Id.Right_DoubleQuote '"'> <', '> <Id.Right_DoubleQuote '"'> <mod_accesslog> <Id.Right_DoubleQuote '"'> <' to server.modules\n'> <'# variable above and uncomment this\n'> <'#accesslog.filename = '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') </access.log> <Id.Right_DoubleQuote '"'> <'\n'> <'\n'> <'setenv.add-environment = ( '> <Id.Right_DoubleQuote '"'> <PATH> <Id.Right_DoubleQuote '"'> <' => env.PATH, '> <Id.Right_DoubleQuote '"'> <GITWEB_CONFIG> <Id.Right_DoubleQuote '"'> <' => env.GITWEB_CONFIG )\n'> <'\n'> <'cgi.assign = ( '> <Id.Right_DoubleQuote '"'> <.cgi> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <Id.Right_DoubleQuote '"'> <' )\n'> <'\n'> <'# mimetype mapping\n'> <'mimetype.assign = (\n'> <' '> <Id.Right_DoubleQuote '"'> <.pdf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/pdf> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.sig> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/pgp-signature> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.spl> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/futuresplash> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.class> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/octet-stream> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.ps> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/postscript> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.torrent> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bittorrent> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.dvi> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-dvi> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.gz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-gzip> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.pac> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-ns-proxy-autoconfig> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.swf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-shockwave-flash> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.tar.gz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-tgz> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.tgz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-tgz> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.tar> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-tar> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.zip> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/zip> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.mp3> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/mpeg> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.m3u> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-mpegurl> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.wma> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-ms-wma> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.wax> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-ms-wax> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.ogg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/ogg> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.wav> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-wav> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.gif> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/gif> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.jpg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/jpeg> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.jpeg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/jpeg> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.png> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/png> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.xbm> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/x-xbitmap> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.xpm> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/x-xpixmap> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.xwd> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/x-xwindowdump> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.css> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/css> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.html> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/html> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.htm> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/html> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.js> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/javascript> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.asc> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.c> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.cpp> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.log> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.conf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.text> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.txt> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.dtd> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/xml> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.xml> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/xml> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.mpeg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/mpeg> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.mpg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/mpeg> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.mov> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/quicktime> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.qt> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/quicktime> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.avi> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-msvideo> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.asf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-ms-asf> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.asx> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-ms-asf> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.wmv> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-ms-wmv> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.bz2> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bzip> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.tbz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bzip-compressed-tar> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <.tar.bz2> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bzip-compressed-tar> <Id.Right_DoubleQuote '"'> <',\n'> <' '> <Id.Right_DoubleQuote '"'> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <'\n'> <' )\n'> ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<x> (DQ ($ Id.VSub_DollarName '$local'))} {<Id.Lit_Equals '='>} {<xtrue>}) (command.Simple words: [{<echo>} {(SQ <'server.bind = "127.0.0.1"'>)}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) ] ) ] ) ) (command.ShFunction name: apache2_conf body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$module_path'))})] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-d>} {(DQ </usr/lib/httpd/modules>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module_path) op: assign_op.Equal rhs: {(DQ </usr/lib/httpd/modules>)} spids: [1884] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-d>} {(DQ </usr/lib/apache2/modules>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module_path) op: assign_op.Equal rhs: {(DQ </usr/lib/apache2/modules>)} spids: [1901] ) ] ) ] ) ] spids: [1859 1870] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bind) op: assign_op.Equal rhs: (word.Empty) spids: [1910] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<x> (DQ ($ Id.VSub_DollarName '$local'))} {<Id.Lit_Equals '='>} {<xtrue>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bind) op: assign_op.Equal rhs: {(SQ <'127.0.0.1:'>)} spids: [1926] ) ] ) ] ) (command.Simple words: [{<echo>} {(SQ <'text/css css'>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </mime.types>)} ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 1999 stdin_parts: [ <'ServerName '> <Id.Right_DoubleQuote '"'> <git-instaweb> <Id.Right_DoubleQuote '"'> <'\n'> <'ServerRoot '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$root') <Id.Right_DoubleQuote '"'> <'\n'> <'DocumentRoot '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$root') <Id.Right_DoubleQuote '"'> <'\n'> <'ErrorLog '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') </error.log> <Id.Right_DoubleQuote '"'> <'\n'> <'CustomLog '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') </access.log> <Id.Right_DoubleQuote '"'> <' combined\n'> <'PidFile '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </pid> <Id.Right_DoubleQuote '"'> <'\n'> <'Listen '> ($ Id.VSub_DollarName '$bind') ($ Id.VSub_DollarName '$port') <'\n'> ] ) ] ) (command.ForEach iter_name: mod iter_words: [{<mpm_event>} {<mpm_prefork>} {<mpm_worker>}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (C {<test>} {<-e>} {($ Id.VSub_DollarName '$module_path') </mod_> (${ Id.VSub_Name mod) <.so> } ) ] action: [ (command.Simple words: [ {<echo>} {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)} { (DQ ($ Id.VSub_DollarName '$module_path') </mod_> (${ Id.VSub_Name mod) <.so> ) } ] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) (command.ControlFlow token: <Id.ControlFlow_Break break> ) ] spids: [2018 2032] ) ] ) ] ) ) (command.ForEach iter_name: mod iter_words: [{<mime>} {<dir>} {<env>} {<log_config>} {<authz_core>}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (C {<test>} {<-e>} {($ Id.VSub_DollarName '$module_path') </mod_> (${ Id.VSub_Name mod) <.so> } ) ] action: [ (command.Simple words: [ {<echo>} {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)} { (DQ ($ Id.VSub_DollarName '$module_path') </mod_> (${ Id.VSub_Name mod) <.so> ) } ] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) ] spids: [2096 2110] ) ] ) ] ) ) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 2166 stdin_parts: [ <'TypesConfig '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </mime.types> <Id.Right_DoubleQuote '"'> <'\n'> <'DirectoryIndex gitweb.cgi\n'> ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$module_path') </mod_perl.so>)}) (command.Simple words: [ {<sane_grep>} {(SQ <MOD_PERL>)} {(DQ ($ Id.VSub_DollarName '$root') </gitweb.cgi>)} ] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {</dev/null>} ) ] ) ] ) ] action: [ (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 2237 stdin_parts: [ <'LoadModule perl_module '> ($ Id.VSub_DollarName '$module_path') <'/mod_perl.so\n'> <'PerlPassEnv GIT_DIR\n'> <'PerlPassEnv GIT_EXEC_PATH\n'> <'PerlPassEnv GITWEB_CONFIG\n'> <'<Location /gitweb.cgi>\n'> <'\tSetHandler perl-script\n'> <'\tPerlResponseHandler ModPerl::Registry\n'> <'\tPerlOptions +ParseHeaders\n'> <'\tOptions +ExecCGI\n'> <'</Location>\n'> ] ) ] ) ] spids: [2177 2206] ) ] else_action: [ (C {<resolve_full_httpd>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:list_mods) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$full_httpd'))}) (C {<sed>} {(SQ <'s/-f$/-l/'>)}) ] negated: F ) ] ) ) } spids: [2249] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {($ Id.VSub_DollarName '$list_mods')}) (command.Simple words: [{<sane_grep>} {(SQ <'mod_cgi\\.c'>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {</dev/null>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$module_path') </mod_cgi.so>)}) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'LoadModule cgi_module '> ($ Id.VSub_DollarName '$module_path') </mod_cgi.so> ) } ] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) ] spids: [2287 2299] ) ] else_action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {($ Id.VSub_DollarName '$list_mods')}) (command.Simple words: [{<grep>} {(SQ <'mod_cgid\\.c'>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {</dev/null>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$module_path') </mod_cgid.so>)} ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'LoadModule cgid_module '> ($ Id.VSub_DollarName '$module_path') </mod_cgid.so> ) } ] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) ] spids: [2340 2352] ) ] else_action: [ (C {<echo>} {(DQ <'You have no CGI support!'>)}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<2>} ) ] ) ] ) (command.Simple words: [{<echo>} {(DQ <'ScriptSock logs/gitweb.sock'>)}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) ] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 2425 stdin_parts: [ <'PassEnv GIT_DIR\n'> <'PassEnv GIT_EXEC_PATH\n'> <'PassEnv GITWEB_CONFIG\n'> <'AddHandler cgi-script .cgi\n'> <'<Location /gitweb.cgi>\n'> <'\tOptions +ExecCGI\n'> <'</Location>\n'> ] ) ] ) ] ) ] ) ) (command.ShFunction name: mongoose_conf body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 2494 stdin_parts: [ <'# Mongoose web server configuration file.\n'> <"# Lines starting with '#' and empty lines are ignored.\n"> <'# For detailed description of every option, visit\n'> <'# http://code.google.com/p/mongoose/wiki/MongooseManual\n'> <'\n'> <'root\t\t'> ($ Id.VSub_DollarName '$root') <'\n'> <'ports\t\t'> ($ Id.VSub_DollarName '$port') <'\n'> <'index_files\tgitweb.cgi\n'> <'#ssl_cert\t'> ($ Id.VSub_DollarName '$fqgitdir') <'/gitweb/ssl_cert.pem\n'> <'error_log\t'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') <'/error.log\n'> <'access_log\t'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') <'/access.log\n'> <'\n'> <'#cgi setup\n'> <'cgi_env\t\tPATH='> ($ Id.VSub_DollarName '$PATH') <',GIT_DIR='> ($ Id.VSub_DollarName '$GIT_DIR') <',GIT_EXEC_PATH='> ($ Id.VSub_DollarName '$GIT_EXEC_PATH') <',GITWEB_CONFIG='> ($ Id.VSub_DollarName '$GITWEB_CONFIG') <'\n'> <'cgi_interp\t'> ($ Id.VSub_DollarName '$PERL') <'\n'> <'cgi_ext\t\tcgi,pl\n'> <'\n'> <'# mimetype mapping\n'> < 'mime_types\t.gz=application/x-gzip,.tar.gz=application/x-tgz,.tgz=application/x-tgz,.tar=application/x-tar,.zip=application/zip,.gif=image/gif,.jpg=image/jpeg,.jpeg=image/jpeg,.png=image/png,.css=text/css,.html=text/html,.htm=text/html,.js=text/javascript,.c=text/plain,.cpp=text/plain,.log=text/plain,.conf=text/plain,.text=text/plain,.txt=text/plain,.dtd=text/xml,.bz2=application/x-bzip,.tbz=application/x-bzip-compressed-tar,.tar.bz2=application/x-bzip-compressed-tar\n' > ] ) ] ) ] ) ) (command.ShFunction name: plackup_conf body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb.psgi>)} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 3211 stdin_parts: [ <'#!'> ($ Id.VSub_DollarName '$PERL') <'\n'> <'\n'> <'# gitweb - simple web interface to track changes in git repositories\n'> <'# PSGI wrapper and server starter (see http://plackperl.org)\n'> <'\n'> <'use strict;\n'> <'\n'> <'use IO::Handle;\n'> <'use Plack::MIME;\n'> <'use Plack::Builder;\n'> <'use Plack::App::WrapCGI;\n'> < 'use CGI::Emulate::PSGI 0.07; # minimum version required to work with gitweb\n' > <'\n'> <'# mimetype mapping (from lighttpd_conf)\n'> <'Plack::MIME->add_type(\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.pdf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/pdf> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.sig> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/pgp-signature> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.spl> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/futuresplash> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.class> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/octet-stream> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.ps> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/postscript> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.torrent> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bittorrent> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.dvi> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-dvi> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.gz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-gzip> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.pac> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-ns-proxy-autoconfig> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.swf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-shockwave-flash> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.tar.gz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-tgz> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.tgz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-tgz> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.tar> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-tar> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.zip> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/zip> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.mp3> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/mpeg> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.m3u> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-mpegurl> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.wma> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-ms-wma> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.wax> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-ms-wax> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.ogg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/ogg> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.wav> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <audio/x-wav> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.gif> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/gif> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.jpg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/jpeg> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.jpeg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/jpeg> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.png> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/png> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.xbm> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/x-xbitmap> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.xpm> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/x-xpixmap> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.xwd> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <image/x-xwindowdump> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.css> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/css> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.html> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/html> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.htm> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/html> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.js> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/javascript> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.asc> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.c> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.cpp> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.log> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.conf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.text> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.txt> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.dtd> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/xml> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.xml> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/xml> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.mpeg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/mpeg> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.mpg> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/mpeg> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.mov> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/quicktime> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.qt> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/quicktime> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.avi> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-msvideo> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.asf> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-ms-asf> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.asx> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-ms-asf> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.wmv> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <video/x-ms-wmv> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.bz2> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bzip> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.tbz> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bzip-compressed-tar> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <.tar.bz2> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <application/x-bzip-compressed-tar> <Id.Right_DoubleQuote '"'> <',\n'> <'\t'> <Id.Right_DoubleQuote '"'> <Id.Right_DoubleQuote '"'> <' => '> <Id.Right_DoubleQuote '"'> <text/plain> <Id.Right_DoubleQuote '"'> <'\n'> <');\n'> <'\n'> <'my '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'app = builder {\n'> <'\t# to be able to override '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'SIG{__WARN__} to log build time warnings\n'> <'\tuse CGI::Carp; # it sets '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'SIG{__WARN__} itself\n'> <'\n'> <'\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'logdir = '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') <Id.Right_DoubleQuote '"'> <';\n'> <'\topen my '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"access_log_fh, '>>', "> <Id.Right_DoubleQuote '"'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <logdir/access.log> <Id.Right_DoubleQuote '"'> <'\n'> <'\t\tor die '> <Id.Right_DoubleQuote '"'> <"Couldn't open access log '"> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"logdir/access.log': "> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'!'> <Id.Right_DoubleQuote '"'> <';\n'> <'\topen my '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"error_log_fh, '>>', "> <Id.Right_DoubleQuote '"'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <logdir/error.log> <Id.Right_DoubleQuote '"'> <'\n'> <'\t\tor die '> <Id.Right_DoubleQuote '"'> <"Couldn't open error log '"> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"logdir/error.log': "> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'!'> <Id.Right_DoubleQuote '"'> <';\n'> <'\n'> <'\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'access_log_fh->autoflush(1);\n'> <'\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'error_log_fh->autoflush(1);\n'> <'\n'> <'\t# redirect build time warnings to error.log\n'> <'\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"SIG{'__WARN__'} = sub {\n"> <'\t\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'msg = shift;\n'> <'\t\t# timestamp warning like in CGI::Carp::warn\n'> <'\t\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'stamp = CGI::Carp::stamp();\n'> <'\t\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'msg =~ s/^/'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'stamp/gm;\n'> <'\t\tprint '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'error_log_fh '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'msg;\n'> <'\t};\n'> <'\n'> <'\t# write errors to error.log, access to access.log\n'> <"\tenable 'AccessLog',\n"> <'\t\tformat => '> <Id.Right_DoubleQuote '"'> <combined> <Id.Right_DoubleQuote '"'> <',\n'> <'\t\tlogger => sub { print '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'access_log_fh @_; };\n'> <'\tenable sub {\n'> <'\t\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'app = shift;\n'> <'\t\tsub {\n'> <'\t\t\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'env = shift;\n'> <'\t\t\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"env->{'psgi.errors'} = "> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'error_log_fh;\n'> <'\t\t\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'app->('> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'env);\n'> <'\t\t}\n'> <'\t};\n'> <"\t# gitweb currently doesn't work with "> ($ Id.VSub_DollarName '$SIG') <"{CHLD} set to 'IGNORE',\n"> <"\t# because it uses 'close "> ($ Id.VSub_DollarName '$fd') <" or die...' on piped filehandle "> ($ Id.VSub_DollarName '$fh') <'\n'> <'\t# (which causes the parent process to wait for child to finish).\n'> <'\tenable_if { '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"SIG{'CHLD'} eq 'IGNORE' } sub {\n"> <'\t\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'app = shift;\n'> <'\t\tsub {\n'> <'\t\t\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'env = shift;\n'> <'\t\t\tlocal '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"SIG{'CHLD'} = 'DEFAULT';\n"> <'\t\t\tlocal '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"SIG{'CLD'} = 'DEFAULT';\n"> <'\t\t\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'app->('> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'env);\n'> <'\t\t}\n'> <'\t};\n'> <'\t# serve static files, i.e. stylesheet, images, script\n'> <"\tenable 'Static',\n"> <'\t\tpath => sub { m!'> <Id.Lit_Other '\\'> <'.(js|css|png)'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'! && s!^/gitweb/!! },\n'> <'\t\troot => '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$root') </> <Id.Right_DoubleQuote '"'> <',\n'> <"\t\tencoding => 'utf-8'; # encoding for 'text/plain' files\n"> <'\t# convert CGI application to PSGI app\n'> <'\tPlack::App::WrapCGI->new(script => '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$root') </gitweb.cgi> <Id.Right_DoubleQuote '"'> <')->to_app;\n'> <'};\n'> <'\n'> <'# make it runnable as standalone app,\n'> <"# like it would be run via 'plackup' utility\n"> <'if (caller) {\n'> <'\treturn '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'app;\n'> <'} else {\n'> <'\trequire Plack::Runner;\n'> <'\n'> <'\tmy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'runner = Plack::Runner->new();\n'> <'\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'runner->parse_options(qw(--env deployment --port '> ($ Id.VSub_DollarName '$port') <'),\n'> <'\t\t\t\t'> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$local') <Id.Right_DoubleQuote '"'> <' ? qw(--host 127.0.0.1) : ());\n'> <'\t'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'runner->run('> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'app);\n'> <'}\n'> <'__END__\n'> ] ) ] ) (C {<chmod>} {<a> <Id.Lit_Other '+'> <x>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb.psgi>)} ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$conf'))}) ] ) ) (command.ShFunction name: gitweb_conf body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb_config.perl>)} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 3291 stdin_parts: [ <'#!@@PERL@@\n'> <'our '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'projectroot = '> <Id.Right_DoubleQuote '"'> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<dirname>} {(DQ ($ Id.VSub_DollarName '$fqgitdir'))})] ) ) <Id.Right_DoubleQuote '"'> <';\n'> <'our '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'git_temp = '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') </gitweb/tmp> <Id.Right_DoubleQuote '"'> <';\n'> <'our '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'projects_list = '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'projectroot;\n'> <'\n'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <"feature{'remote_heads'}{'default'} = [1];\n"> ] ) ] ) ] ) ) (command.ShFunction name: configure_httpd body: (command.BraceGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$httpd'))} arms: [ (case_arm pat_list: [{<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>}] action: [(C {<lighttpd_conf>})] spids: [3311 3314 3320 -1] ) (case_arm pat_list: [ {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>} {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>} ] action: [(C {<apache2_conf>})] spids: [3323 3330 3336 -1] ) (case_arm pat_list: [{<webrick>}] action: [(C {<webrick_conf>})] spids: [3339 3340 3346 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}] action: [(C {<mongoose_conf>})] spids: [3349 3352 3358 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}] action: [(C {<plackup_conf>})] spids: [3361 3364 3370 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (C {<echo>} {(DQ <'Unknown httpd specified: '> ($ Id.VSub_DollarName '$httpd'))}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [3373 3374 3390 -1] ) ] ) ] ) ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$action'))} arms: [ (case_arm pat_list: [{<stop>}] action: [ (C {<stop_httpd>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [3406 3407 3418 -1] ) (case_arm pat_list: [{<start>}] action: [ (C {<start_httpd>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [3420 3421 3432 -1] ) (case_arm pat_list: [{<restart>}] action: [ (C {<stop_httpd>}) (C {<start_httpd>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [3434 3435 3449 -1] ) ] ) (C {<gitweb_conf>}) (C {<resolve_full_httpd>}) (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:conf) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') <.conf> ) } spids: [3469] ) ] ) (C {<configure_httpd>}) (C {<start_httpd>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:url) op: assign_op.Equal rhs: {<http> <Id.Lit_Other ':'> <//127.0.0.1> <Id.Lit_Other ':'> ($ Id.VSub_DollarName '$port')} spids: [3483] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$browser'))}) terminator: <Id.Op_Semi _> ) ] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<httpd_is_ready>}) (C {<git>} {<web--browse>} {<-b>} {(DQ ($ Id.VSub_DollarName '$browser'))} {($ Id.VSub_DollarName '$url')} ) (C {<echo>} {($ Id.VSub_DollarName '$url')}) ] ) ] spids: [3491 3502] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<httpd_is_ready>}) (C {<git>} {<web--browse>} {<-c>} {(DQ <instaweb.browser>)} {($ Id.VSub_DollarName '$url')}) (C {<echo>} {($ Id.VSub_DollarName '$url')}) ] ) ] ) ] )