(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 '$('> child: (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 '$('> child: (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 '$('> child: (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 '$('> child: (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 '$('> child: (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: (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: (condition.Shell commands: [ (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$httpd'))}) (command.Simple words: [{<sane_grep>} {<-->} {(SQ <'-f *$'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] 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 tok: <Id.VOp1_DPercent '%%'> arg_word: {<' '> <Id.Lit_Other '*'>} ) ) ) } spids: [288] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] spids: [271 274 305 -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: [322] ) ] ) (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 tok: <Id.VOp1_DPercent '%%'> arg_word: {<' '> <Id.Lit_Other '*'>} ) ) ) } spids: [329] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] spids: [308 311 346 -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 '$('> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$httpd')}) (C {<cut>} {<-f1>} {<-d> (SQ <' '>)}) ] negated: F ) ) ) } spids: [353] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$httpd_only'))} arms: [ (case_arm pat_list: [{<'/'> <Id.Lit_Star '*'>}] action: [(C {<Id.Lit_Colon ':'>})] spids: [384 386 390 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (command.Simple words: [{<which>} {($ Id.VSub_DollarName '$httpd_only')}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [392 393 404 -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: [412] ) ] ) ] spids: [374 409] ) ] 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: (condition.Shell commands: [ (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: [474] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> ) ] spids: [458 471] ) ] ) ] ) ) (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 op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ] ) ) (command.ShFunction name: start_httpd body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: [527 539] ) ] ) (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: [574] ) ] ) (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: [656] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: [661 673] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$fqgitdir') <'/pid'>)} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 709 stdin_parts: [($ Id.VSub_DollarName '$pid') <'\n'>] ) ) ] do_fork: T ) ] spids: [629 636 711 -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: (condition.Shell commands: [ (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: [725 737] ) ] ) ] spids: [714 715 757 -1] ) ] ) ] ) ) (command.ShFunction name: stop_httpd body: (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 '$('> child: (C {<cat>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') <'/pid'>)}) ) } ) ] ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') <'/pid'>)}) ] ) ) (command.ShFunction name: httpd_is_ready body: (BraceGroup children: [ (C {(DQ ($ Id.VSub_DollarName '$PERL'))} {<-MIO> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Socket> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <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_BadBackslash '\\'> <'\''> ($ Id.VSub_DollarName '$httpd') <Id.Lit_BadBackslash '\\'> <'\' 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_BadBackslash '\\'> <'n!;\n'> ) } ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [(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: [887] ) ] ) ] spids: [881 884 893 -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: [902] ) ] ) ] spids: [896 899 908 -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: [917] ) ] ) ] spids: [911 914 923 -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: [932] ) ] ) ] spids: [926 929 936 -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: [948] ) ] ) ] spids: [939 942 954 -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: [966] ) ] ) ] spids: [957 960 972 -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: [984] ) ] ) ] spids: [975 978 990 -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: [1002] ) ] ) ] spids: [993 996 1008 -1] ) (case_arm pat_list:[{<-->}] spids:[1011 1012 1015 -1]) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<usage>})] spids: [1018 1019 1025 -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 '$('> child:(C {<git>} {<--exec-path>})))} spids: [1045] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_DIR) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir'))} spids: [1054] ) ] ) (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: [1059] ) ] ) (C {<export>} {<GIT_EXEC_PATH>} {<GIT_DIR>} {<GITWEB_CONFIG>}) (command.ShFunction name: webrick_conf body: (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: [1094] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$wrapper'))} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1130 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'> ] ) ) ] do_fork: T ) (C {<chmod>} {<Id.Lit_Other '+'> <x>} {(DQ ($ Id.VSub_DollarName '$wrapper'))}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: { (DQ ($ Id.VSub_DollarName '$fqgitdir') <'/gitweb/'> ($ Id.VSub_DollarName '$httpd') <.rb> ) } ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1228 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'> ] ) ) ] do_fork: T ) (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: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1823 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'> ] ) ) ] do_fork: T ) (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 op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] do_fork: T ) ] ) ] ) ) (command.ShFunction name: apache2_conf body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [(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: [1886] ) ] ) ] ) (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: [1903] ) ] ) ] ) ] spids: [1861 1872] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bind) op: assign_op.Equal rhs: (word.Empty) spids: [1912] ) ] ) (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: [1928] ) ] ) ] ) (command.Simple words: [{<echo>} {(SQ <'text/css css'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$fqgitdir') <'/mime.types'>)} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2001 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'> ] ) ) ] do_fork: T ) (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: (condition.Shell commands: [ (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 op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] do_fork: T ) (command.ControlFlow token: <Id.ControlFlow_Break break> ) ] spids: [2020 2034] ) ] ) ] ) ) (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: (condition.Shell commands: [ (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 op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] do_fork: T ) ] spids: [2098 2112] ) ] ) ] ) ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2168 stdin_parts: [ <'TypesConfig '> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName '$fqgitdir') <'/mime.types'> <Id.Right_DoubleQuote '"'> <'\n'> <'DirectoryIndex gitweb.cgi\n'> ] ) ) ] do_fork: T ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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 op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ) ] ) action: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2239 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'> ] ) ) ] do_fork: T ) ] spids: [2179 2208] ) ] 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 '$('> child: (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$full_httpd'))}) (C {<sed>} {(SQ <'s/-f$/-l/'>)}) ] negated: F ) ) } spids: [2251] ) ] ) (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 op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] negated: F ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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 op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] do_fork: T ) ] spids: [2289 2301] ) ] 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 op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] negated: F ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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 op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] do_fork: T ) ] spids: [2342 2354] ) ] 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 op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] do_fork: T ) ] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2427 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'> ] ) ) ] do_fork: T ) ] ) ] ) ) (command.ShFunction name: mongoose_conf body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2496 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' > ] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: plackup_conf body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$fqgitdir') <'/gitweb/gitweb.psgi'>)} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3213 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_BadBackslash '\\'> <'.(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'> ] ) ) ] do_fork: T ) (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: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$fqgitdir') <'/gitweb/gitweb_config.perl'>)} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3293 stdin_parts: [ <'#!@@PERL@@\n'> <'our '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ) <'projectroot = '> <Id.Right_DoubleQuote '"'> (command_sub left_token: <Id.Left_DollarParen '$('> child: (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'> ] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: configure_httpd body: (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: [3313 3316 3322 -1] ) (case_arm pat_list: [ {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>} {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>} ] action: [(C {<apache2_conf>})] spids: [3325 3332 3338 -1] ) (case_arm pat_list: [{<webrick>}] action: [(C {<webrick_conf>})] spids: [3341 3342 3348 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}] action: [(C {<mongoose_conf>})] spids: [3351 3354 3360 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}] action: [(C {<plackup_conf>})] spids: [3363 3366 3372 -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: [3375 3376 3392 -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: [3408 3409 3420 -1] ) (case_arm pat_list: [{<start>}] action: [ (C {<start_httpd>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [3422 3423 3434 -1] ) (case_arm pat_list: [{<restart>}] action: [ (C {<stop_httpd>}) (C {<start_httpd>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [3436 3437 3451 -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: [3471] ) ] ) (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_Colon ':'> <'//127.0.0.1'> <Id.Lit_Colon ':'> ($ Id.VSub_DollarName '$port')} spids: [3485] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: [3493 3504] ) ] 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')}) ] ) ] ) ] )