(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PERL) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'@@PERL@@' span_id:15))} 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: (Token id:Id.Left_DollarParen val:'$(' span_id:54) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:69) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:82) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:94) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:106) 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 (Token id:Id.Lit_Chars val:'lighttpd -f' span_id:149))} 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 (Token id:Id.Lit_Chars val:'@@GITWEBDIR@@' span_id:168))} 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 (Token id:Id.Lit_Chars val:'-f *$' span_id:245))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:248) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:251) 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: (Token id:Id.VSub_Name val:httpd span_id:291) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{(' *')}) ) ) } spids: [288] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:301) ) ] 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: (Token id:Id.VSub_Name val:httpd span_id:331) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{(' *')}) ) ) } spids: [328] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:341) ) ] 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: (Token id:Id.Left_DollarParen val:'$(' span_id:353) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$httpd')}) (C {(cut)} {(-f1)} {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:366))} ) ] 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: (Token id:Id.Redir_Great val:'>' span_id:397) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:400) 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: (Token id:Id.ControlFlow_Return val:return span_id:478) ) ] 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: (Token id:Id.Redir_GreatAnd val:'>&' span_id:490) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:507) 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: (Token id:Id.Op_Semi val:';' span_id:535) ) ] 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: (Token id:Id.Op_Amp val:'&' span_id:647) ) (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: (Token id:Id.Op_Semi val:';' span_id:669) ) ] action: [ (C {(echo)} { (DQ ('Could not execute http daemon ') ($ Id.VSub_DollarName '$httpd') (.) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:683) arg_word: {(1)} ) ] spids: [659 671] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:694) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') (/pid))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:701) 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: (Token id:Id.Op_Semi val:';' span_id:733) ) ] action: [ (C {(echo)} { (DQ ('Could not execute http daemon ') ($ Id.VSub_DollarName '$httpd') (.) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:747) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:784) 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: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:831) ) ('| = 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: (Token id:Id.KW_While val:while span_id:856) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:1045) 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: (Token id:Id.Redir_Great val:'>' span_id:1103) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$wrapper'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1109) 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: (Token id:Id.Redir_Great val:'>' span_id:1155) fd: -1 arg_word: { (DQ ($ Id.VSub_DollarName '$fqgitdir') (/gitweb/) ($ Id.VSub_DollarName '$httpd') (.rb) ) } ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1163) 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: (Token id:Id.Redir_Great val:'>' span_id:1266) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1272) 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 (Token id:Id.Lit_Chars val:'server.bind = "127.0.0.1"' span_id:1839))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1842) 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 (Token id:Id.Lit_Chars val:'127.0.0.1:' span_id:1928))} spids: [1926] ) ] ) ] ) (command.Simple words: [{(echo)} {(SQ (Token id:Id.Lit_Chars val:'text/css css' span_id:1935))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1938) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') (/mime.types))} ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1948) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1954) 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: (Token id:Id.Redir_DGreat val:'>>' span_id:2056) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:2067) ) ] 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: (Token id:Id.Redir_DGreat val:'>>' span_id:2134) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) ] spids: [2096 2110] ) ] ) ] ) ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:2149) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:2155) 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 (Token id:Id.Lit_Chars val:MOD_PERL span_id:2194))} {(DQ ($ Id.VSub_DollarName '$root') (/gitweb.cgi))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2202) fd: -1 arg_word: {(/dev/null)} ) ] ) ] ) ] action: [ (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:2215) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:2221) 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: (Token id:Id.Left_DollarParen val:'$(' span_id:2250) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$full_httpd'))}) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/-f$/-l/' span_id:2262))} ) ] 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 (Token id:Id.Lit_Chars val:'mod_cgi\\.c' span_id:2274))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2277) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:2280) 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: (Token id:Id.Redir_DGreat val:'>>' span_id:2310) 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 (Token id:Id.Lit_Chars val:'mod_cgid\\.c' span_id:2327))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2330) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:2333) 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: (Token id:Id.Redir_DGreat val:'>>' span_id:2365) 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: (Token id:Id.ControlFlow_Exit val:exit span_id:2382) arg_word: {(2)} ) ] ) ] ) (command.Simple words: [{(echo)} {(DQ ('ScriptSock logs/gitweb.sock'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:2396) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) ] ) ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:2408) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:2414) 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: (Token id:Id.Redir_Great val:'>' span_id:2441) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:2447) 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: (Token id:Id.Redir_Great val:'>' span_id:2516) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') (/gitweb/gitweb.psgi))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:2523) 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: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3013) ) ('app = builder {\n') ('\t# to be able to override ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3016) ) ('SIG{__WARN__} to log build time warnings\n') ('\tuse CGI::Carp; # it sets ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3019) ) ('SIG{__WARN__} itself\n') ('\n') ('\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3023) ) ('logdir = ') (Id.Right_DoubleQuote '"') ($ Id.VSub_DollarName '$fqgitdir') (/gitweb/) ($ Id.VSub_DollarName '$httpd_only') (Id.Right_DoubleQuote '"') (';\n') ('\topen my ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3032) ) ("access_log_fh, '>>', ") (Id.Right_DoubleQuote '"') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3035) ) (logdir/access.log) (Id.Right_DoubleQuote '"') ('\n') ('\t\tor die ') (Id.Right_DoubleQuote '"') ("Couldn't open access log '") (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3042) ) ("logdir/access.log': ") (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3044) ) ('!') (Id.Right_DoubleQuote '"') (';\n') ('\topen my ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3049) ) ("error_log_fh, '>>', ") (Id.Right_DoubleQuote '"') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3052) ) (logdir/error.log) (Id.Right_DoubleQuote '"') ('\n') ('\t\tor die ') (Id.Right_DoubleQuote '"') ("Couldn't open error log '") (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3059) ) ("logdir/error.log': ") (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3061) ) ('!') (Id.Right_DoubleQuote '"') (';\n') ('\n') ('\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3067) ) ('access_log_fh->autoflush(1);\n') ('\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3070) ) ('error_log_fh->autoflush(1);\n') ('\n') ('\t# redirect build time warnings to error.log\n') ('\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3075) ) ("SIG{'__WARN__'} = sub {\n") ('\t\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3078) ) ('msg = shift;\n') ('\t\t# timestamp warning like in CGI::Carp::warn\n') ('\t\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3082) ) ('stamp = CGI::Carp::stamp();\n') ('\t\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3085) ) ('msg =~ s/^/') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3087) ) ('stamp/gm;\n') ('\t\tprint ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3090) ) ('error_log_fh ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3092) ) ('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: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3104) ) ('access_log_fh @_; };\n') ('\tenable sub {\n') ('\t\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3108) ) ('app = shift;\n') ('\t\tsub {\n') ('\t\t\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3112) ) ('env = shift;\n') ('\t\t\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3115) ) ("env->{'psgi.errors'} = ") (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3117) ) ('error_log_fh;\n') ('\t\t\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3120) ) ('app->(') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3122) ) ('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: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3136) ) ("SIG{'CHLD'} eq 'IGNORE' } sub {\n") ('\t\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3139) ) ('app = shift;\n') ('\t\tsub {\n') ('\t\t\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3143) ) ('env = shift;\n') ('\t\t\tlocal ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3146) ) ("SIG{'CHLD'} = 'DEFAULT';\n") ('\t\t\tlocal ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3149) ) ("SIG{'CLD'} = 'DEFAULT';\n") ('\t\t\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3152) ) ('app->(') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3154) ) ('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: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3163) ) ('! && 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: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3185) ) ('app;\n') ('} else {\n') ('\trequire Plack::Runner;\n') ('\n') ('\tmy ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3191) ) ('runner = Plack::Runner->new();\n') ('\t') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3194) ) ('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: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3204) ) ('runner->run(') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3206) ) ('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: (Token id:Id.Redir_Great val:'>' span_id:3250) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') (/gitweb/gitweb_config.perl))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:3257) fd: -1 here_begin: {(EOF)} here_end_span_id: 3291 stdin_parts: [ ('#!@@PERL@@\n') ('our ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3262) ) ('projectroot = ') (Id.Right_DoubleQuote '"') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:3265) command_list: (command.CommandList children: [(C {(dirname)} {(DQ ($ Id.VSub_DollarName '$fqgitdir'))})] ) ) (Id.Right_DoubleQuote '"') (';\n') ('our ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3275) ) ('git_temp = ') (Id.Right_DoubleQuote '"') ($ Id.VSub_DollarName '$fqgitdir') (/gitweb/tmp) (Id.Right_DoubleQuote '"') (';\n') ('our ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3283) ) ('projects_list = ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3285) ) ('projectroot;\n') ('\n') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3288) ) ("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: (Token id:Id.ControlFlow_Exit val:exit span_id:3385) 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: (Token id:Id.ControlFlow_Exit val:exit span_id:3413) arg_word: {(0)} ) ] spids: [3406 3407 3418 -1] ) (case_arm pat_list: [{(start)}] action: [ (C {(start_httpd)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3427) arg_word: {(0)} ) ] spids: [3420 3421 3432 -1] ) (case_arm pat_list: [{(restart)}] action: [ (C {(stop_httpd)}) (C {(start_httpd)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3444) 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: (Token id:Id.Op_Semi val:';' span_id:3500) ) ] 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')}) ] ) ] ) ] )