(List (= scope= flags=0 words=[] bindings=[('PERL', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('OPTIONS_KEEPDASHDASH', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('OPTIONS_SPEC', {[DQ [LIT_CHARS "git instaweb [options] (--start | --stop | --restart)\n"][LIT_CHARS "--\n"][LIT_CHARS "l,local only bind on 127.0.0.1\n"][LIT_CHARS "p,port= the port to bind to\n"][LIT_CHARS "d,httpd= the command to launch\n"][LIT_CHARS "b,browser= the browser to launch\n"][LIT_CHARS "m,module-path= the module path (only needed for apache2)\n"][LIT_CHARS " Action\n"][LIT_CHARS "stop stop the web server\n"][LIT_CHARS "start start the web server\n"][LIT_CHARS "restart restart the web server\n"]]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS git-sh-setup]} ) (= scope= flags=0 words=[] bindings=[('fqgitdir', {[DQ [VarSub GIT_DIR]]})]) (= scope= flags=0 words=[] bindings=[('local', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS --get]} {[LIT_CHARS instaweb.local]})]]})]) (= scope= flags=0 words=[] bindings=[('httpd', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --get]} {[LIT_CHARS instaweb.httpd]})]]})]) (= scope= flags=0 words=[] bindings=[('root', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --get]} {[LIT_CHARS instaweb.gitwebdir]})]]})]) (= scope= flags=0 words=[] bindings=[('port', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --get]} {[LIT_CHARS instaweb.port]})]})]) (= scope= flags=0 words=[] bindings=[('module_path', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --get]} {[LIT_CHARS instaweb.modulepath]})]]})]) (= scope= flags=0 words=[] bindings=[('action', {[DQ [LIT_CHARS browse]]})]) (= scope= flags=0 words=[] bindings=[('conf', {[DQ [VarSub GIT_DIR][LIT_CHARS /gitweb/httpd.conf]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub httpd]]} ) (= scope= flags=0 words=[] bindings=[('httpd', {[SQ ]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub root]]} ) (= scope= flags=0 words=[] bindings=[('root', {[SQ ]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub port]]} ) (= scope= flags=0 words=[] bindings=[('port', {[LIT_CHARS 1234]})]) ) (FunctionDef resolve_full_httpd [] (List (Case to_match={[DQ [VarSub httpd]]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_CHARS apache2] [LIT_OTHER "*"]}, {[LIT_OTHER "*"] [LIT_CHARS lighttpd] [LIT_OTHER "*"]}, {[LIT_OTHER "*"] [LIT_CHARS httpd] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [LIT_CHARS plackup] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [LIT_CHARS webrick] [LIT_OTHER "*"]}]] (If (Pipeline! (Com {[LIT_CHARS echo]} {[DQ [VarSub httpd]]} ) (Com {[LIT_CHARS sane_grep]} {[LIT_CHARS --]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) (= scope= flags=0 words=[] bindings=[('httpd', {[DQ [VarSub httpd][LIT_CHARS " -f"]]})]) ) (List (= scope= flags=0 words=[] bindings=[('full_httpd', {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/gitweb.psgi]]})]) (= scope= flags=0 words=[] bindings=[('httpd_only', {[DQ [VarSub httpd transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS " *"]}]]]})]) (Com {[LIT_CHARS return]} ) ) (List (= scope= flags=0 words=[] bindings=[('full_httpd', {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/webrick.rb]]})]) (= scope= flags=0 words=[] bindings=[('httpd_only', {[DQ [VarSub httpd transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS " *"]}]]]})]) (Com {[LIT_CHARS return]} ) ) ) (= scope= flags=0 words=[] bindings=[('httpd_only', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub httpd]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f1]} {[LIT_CHARS -d] [SQ ]}) )]]})]) (If (Case to_match={[DQ [VarSub httpd_only]]}, pat_word_list=[[{[LIT_CHARS /] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_OTHER ":"]} ) (Com {[LIT_CHARS which]} {[VarSub httpd_only]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) (= scope= flags=0 words=[] bindings=[('full_httpd', {[VarSub httpd]})]) (ElseTrue) (List (For i [{[LIT_CHARS /usr/local/sbin]}, {[LIT_CHARS /usr/sbin]}, {[DQ [VarSub root]]}, {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb]]}]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub i][LIT_CHARS /][VarSub httpd_only]]} ) (List (= scope= flags=0 words=[] bindings=[('full_httpd', {[VarSub i] [LIT_CHARS /] [VarSub httpd]})]) (Com {[LIT_CHARS return]} ) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub httpd_only][LIT_CHARS " not found. Install "][VarSub httpd_only][LIT_CHARS " or use"]]} {[DQ [LIT_CHARS "--httpd to specify another httpd daemon."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) ) (FunctionDef start_httpd [] (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub fqgitdir][LIT_CHARS /pid]]} ) (List (Com {[LIT_CHARS say]} {[DQ [LIT_CHARS "Instance already running. Restarting..."]]} ) (Com {[LIT_CHARS stop_httpd]} ) ) ) (Com {[LIT_CHARS resolve_full_httpd]} ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only]]} ) (= scope= flags=0 words=[] bindings=[('conf', {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS .conf]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub conf]]} ) (Com {[LIT_CHARS configure_httpd]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/gitweb_config.perl]]} ) (Com {[LIT_CHARS gitweb_conf]} ) ) (Case to_match={[DQ [VarSub httpd]]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_CHARS mongoose] [LIT_OTHER "*"]}, {[LIT_OTHER "*"] [LIT_CHARS plackup] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (Fork (Com {[VarSub full_httpd]} {[DQ [VarSub conf]]} ) ) (= scope= flags=0 words=[] bindings=[('pid', {[VarSub !]})]) (If (Com {[LIT_CHARS test]} {[VarSub ?]} {[LIT_NEQUAL "!="]} {[LIT_CHARS 0]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Could not execute http daemon "][VarSub httpd][LIT_CHARS .]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub fqgitdir][LIT_CHARS /pid]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [VarSub pid][LIT_CHARS "\n"]]} 0), > ) ) (List (Com {[VarSub full_httpd]} {[DQ [VarSub conf]]} ) (If (Com {[LIT_CHARS test]} {[VarSub ?]} {[LIT_NEQUAL "!="]} {[LIT_CHARS 0]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Could not execute http daemon "][VarSub httpd][LIT_CHARS .]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) ) ) ) (FunctionDef stop_httpd [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub fqgitdir][LIT_CHARS /pid]]} ) (Com {[LIT_CHARS kill]} {[ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub fqgitdir][LIT_CHARS /pid]]})]} ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub fqgitdir][LIT_CHARS /pid]]} ) ) ) (FunctionDef httpd_is_ready [] (Com {[DQ [VarSub PERL]]} {[LIT_CHARS -MIO] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS Socket] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS INET]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "local "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "| = 1; # turn on autoflush\n"][LIT_CHARS "exit if (IO::Socket::INET->new('127.0.0.1:"][VarSub port][LIT_CHARS "'));\n"][LIT_CHARS "print 'Waiting for "][\ LIT_ESCAPED_CHAR "\\'"][VarSub httpd][\ LIT_ESCAPED_CHAR "\\'"][LIT_CHARS " to start ..';\n"][LIT_CHARS "do {\n"][LIT_CHARS "\tprint '.';\n"][LIT_CHARS "\tsleep(1);\n"][LIT_CHARS "} until (IO::Socket::INET->new('127.0.0.1:"][VarSub port][LIT_CHARS "'));\n"][LIT_CHARS "print qq! (done)"][\ LIT_ESCAPED_CHAR "\\n"][LIT_CHARS "!;\n"]]} ) ) (While (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_NEQUAL "!="]} {[LIT_CHARS 0]} ) (List (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS --stop]}, {[LIT_CHARS stop]}], [{[LIT_CHARS --start]}, {[LIT_CHARS start]}], [{[LIT_CHARS --restart]}, {[LIT_CHARS restart]}], [{[LIT_CHARS -l]}, {[LIT_CHARS --local]}], [{[LIT_CHARS -d]}, {[LIT_CHARS --httpd]}], [{[LIT_CHARS -b]}, {[LIT_CHARS --browser]}], [{[LIT_CHARS -p]}, {[LIT_CHARS --port]}], [{[LIT_CHARS -m]}, {[LIT_CHARS --module-path]}], [{[LIT_CHARS --]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('action', {[DQ [LIT_CHARS stop]]})]) (= scope= flags=0 words=[] bindings=[('action', {[DQ [LIT_CHARS start]]})]) (= scope= flags=0 words=[] bindings=[('action', {[DQ [LIT_CHARS restart]]})]) (= scope= flags=0 words=[] bindings=[('local', {[LIT_CHARS true]})]) (List (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('httpd', {[DQ [VarSub 1]]})]) ) (List (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('browser', {[DQ [VarSub 1]]})]) ) (List (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('port', {[DQ [VarSub 1]]})]) ) (List (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('module_path', {[DQ [VarSub 1]]})]) ) (ElseTrue) (Com {[LIT_CHARS usage]} ) ) (Com {[LIT_CHARS shift]} ) ) ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub GIT_DIR][LIT_CHARS /gitweb/tmp]]} ) (= scope= flags=0 words=[] bindings=[('GIT_EXEC_PATH', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS --exec-path]})]]})]) (= scope= flags=0 words=[] bindings=[('GIT_DIR', {[DQ [VarSub fqgitdir]]})]) (= scope= flags=0 words=[] bindings=[('GITWEB_CONFIG', {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/gitweb_config.perl]]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_EXEC_PATH]}, {[LIT_CHARS GIT_DIR]}, {[LIT_CHARS GITWEB_CONFIG]}] bindings=[]) (FunctionDef webrick_conf [] (List (= scope= flags=0 words=[] bindings=[('wrapper', {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd][LIT_CHARS /wrapper.sh]]})]) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub wrapper]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/bin/sh\n"][LIT_CHARS "# we use this shell script wrapper around the real gitweb.cgi since\n"][LIT_CHARS "# there appears to be no other way to pass arbitrary environment variables\n"][LIT_CHARS "# into the CGI process\n"][LIT_CHARS "GIT_EXEC_PATH="][VarSub GIT_EXEC_PATH][LIT_CHARS " GIT_DIR="][VarSub GIT_DIR][LIT_CHARS " GITWEB_CONFIG="][VarSub GITWEB_CONFIG][LIT_CHARS "\n"][LIT_CHARS "export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG\n"][LIT_CHARS "exec "][VarSub root][LIT_CHARS "/gitweb.cgi\n"]]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub wrapper]]} ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd][LIT_CHARS .rb]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/usr/bin/env ruby\n"][LIT_CHARS "require 'webrick'\n"][LIT_CHARS "require 'logger'\n"][LIT_CHARS "options = {\n"][LIT_CHARS " :Port => "][VarSub port][LIT_CHARS ",\n"][LIT_CHARS " :DocumentRoot => "][RIGHT_D_QUOTE "\""][VarSub root][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " :Logger => Logger.new('"][VarSub fqgitdir][LIT_CHARS "/gitweb/error.log'),\n"][LIT_CHARS " :AccessLog => [\n"][LIT_CHARS " [ Logger.new('"][VarSub fqgitdir][LIT_CHARS "/gitweb/access.log'),\n"][LIT_CHARS " WEBrick::AccessLog::COMBINED_LOG_FORMAT ]\n"][LIT_CHARS " ],\n"][LIT_CHARS " :DirectoryIndex => ["][RIGHT_D_QUOTE "\""][LIT_CHARS gitweb.cgi][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS " :CGIInterpreter => "][RIGHT_D_QUOTE "\""][VarSub wrapper][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " :StartCallback => lambda do\n"][LIT_CHARS " File.open("][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /pid][RIGHT_D_QUOTE "\""][LIT_CHARS ", "][RIGHT_D_QUOTE "\""][LIT_CHARS w][RIGHT_D_QUOTE "\""][LIT_CHARS ") { |f| f.puts Process.pid }\n"][LIT_CHARS " end,\n"][LIT_CHARS " :ServerType => WEBrick::Daemon,\n"][LIT_CHARS "}\n"][LIT_CHARS "options[:BindAddress] = '127.0.0.1' if "][RIGHT_D_QUOTE "\""][VarSub local][RIGHT_D_QUOTE "\""][LIT_CHARS " == "][RIGHT_D_QUOTE "\""][LIT_CHARS true][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "server = WEBrick::HTTPServer.new(options)\n"][LIT_CHARS "['INT', 'TERM'].each do |signal|\n"][LIT_CHARS " trap(signal) {server.shutdown}\n"][LIT_CHARS "end\n"][LIT_CHARS "server.start\n"]]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd][LIT_CHARS .rb]]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub conf]]} ) ) ) (FunctionDef lighttpd_conf [] (List (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "server.document-root = "][RIGHT_D_QUOTE "\""][VarSub root][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "server.port = "][VarSub port][LIT_CHARS "\n"][LIT_CHARS "server.modules = ( "][RIGHT_D_QUOTE "\""][LIT_CHARS mod_setenv][RIGHT_D_QUOTE "\""][LIT_CHARS ", "][RIGHT_D_QUOTE "\""][LIT_CHARS mod_cgi][RIGHT_D_QUOTE "\""][LIT_CHARS " )\n"][LIT_CHARS "server.indexfiles = ( "][RIGHT_D_QUOTE "\""][LIT_CHARS gitweb.cgi][RIGHT_D_QUOTE "\""][LIT_CHARS " )\n"][LIT_CHARS "server.pid-file = "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /pid][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "server.errorlog = "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS /error.log][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# to enable, add "][RIGHT_D_QUOTE "\""][LIT_CHARS mod_access][RIGHT_D_QUOTE "\""][LIT_CHARS ", "][RIGHT_D_QUOTE "\""][LIT_CHARS mod_accesslog][RIGHT_D_QUOTE "\""][LIT_CHARS " to server.modules\n"][LIT_CHARS "# variable above and uncomment this\n"][LIT_CHARS "#accesslog.filename = "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS /access.log][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "setenv.add-environment = ( "][RIGHT_D_QUOTE "\""][LIT_CHARS PATH][RIGHT_D_QUOTE "\""][LIT_CHARS " => env.PATH, "][RIGHT_D_QUOTE "\""][LIT_CHARS GITWEB_CONFIG][RIGHT_D_QUOTE "\""][LIT_CHARS " => env.GITWEB_CONFIG )\n"][LIT_CHARS "\n"][LIT_CHARS "cgi.assign = ( "][RIGHT_D_QUOTE "\""][LIT_CHARS .cgi][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][RIGHT_D_QUOTE "\""][LIT_CHARS " )\n"][LIT_CHARS "\n"][LIT_CHARS "# mimetype mapping\n"][LIT_CHARS "mimetype.assign = (\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .pdf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/pdf][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .sig][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/pgp-signature][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .spl][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/futuresplash][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .class][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/octet-stream][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .ps][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/postscript][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .torrent][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bittorrent][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .dvi][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-dvi][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .gz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-gzip][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .pac][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-ns-proxy-autoconfig][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .swf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-shockwave-flash][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .tar.gz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-tgz][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .tgz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-tgz][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .tar][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-tar][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .zip][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/zip][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .mp3][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .m3u][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-mpegurl][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .wma][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-ms-wma][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .wax][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-ms-wax][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .ogg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/ogg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .wav][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-wav][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .gif][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/gif][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .jpg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/jpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .jpeg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/jpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .png][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/png][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .xbm][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/x-xbitmap][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .xpm][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/x-xpixmap][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .xwd][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/x-xwindowdump][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .css][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/css][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .html][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/html][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .htm][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/html][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .js][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/javascript][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .asc][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .c][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .cpp][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .log][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .conf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .text][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .txt][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .dtd][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/xml][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .xml][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/xml][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .mpg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .mov][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/quicktime][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .qt][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/quicktime][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .avi][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-msvideo][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .asf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-ms-asf][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .asx][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-ms-asf][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .wmv][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-ms-wmv][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .bz2][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bzip][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .tbz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bzip-compressed-tar][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS .tar.bz2][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bzip-compressed-tar][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS " )\n"]]} 0), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS x] [DQ [VarSub local]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS xtrue]} ) (Com {[LIT_CHARS echo]} {[SQ ]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), > ) ) ) ) (FunctionDef apache2_conf [] (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub module_path]]} ) (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [LIT_CHARS /usr/lib/httpd/modules]]} ) (= scope= flags=0 words=[] bindings=[('module_path', {[DQ [LIT_CHARS /usr/lib/httpd/modules]]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [LIT_CHARS /usr/lib/apache2/modules]]} ) (= scope= flags=0 words=[] bindings=[('module_path', {[DQ [LIT_CHARS /usr/lib/apache2/modules]]})]) ) ) ) (= scope= flags=0 words=[] bindings=[('bind', {[SQ ]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS x] [DQ [VarSub local]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS xtrue]} ) (= scope= flags=0 words=[] bindings=[('bind', {[SQ ]})]) ) (Com {[LIT_CHARS echo]} {[SQ ]} < (FilenameRedirectNode filename={[DQ [VarSub fqgitdir][LIT_CHARS /mime.types]]} "> 1), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "ServerName "][RIGHT_D_QUOTE "\""][LIT_CHARS git-instaweb][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "ServerRoot "][RIGHT_D_QUOTE "\""][VarSub root][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "DocumentRoot "][RIGHT_D_QUOTE "\""][VarSub root][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "ErrorLog "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS /error.log][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "CustomLog "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS /access.log][RIGHT_D_QUOTE "\""][LIT_CHARS " combined\n"][LIT_CHARS "PidFile "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /pid][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "Listen "][VarSub bind][VarSub port][LIT_CHARS "\n"]]} 0), > ) (For mod [{[LIT_CHARS mime]}, {[LIT_CHARS dir]}, {[LIT_CHARS env]}, {[LIT_CHARS log_config]}]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[VarSub module_path] [LIT_CHARS /mod_] [VarSub mod] [LIT_CHARS .so]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "LoadModule "][VarSub mod][LIT_CHARS "_module "]]} {[DQ [VarSub module_path][LIT_CHARS /mod_][VarSub mod][LIT_CHARS .so]]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), > ) ) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "TypesConfig "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /mime.types][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "DirectoryIndex gitweb.cgi\n"]]} 0), > ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub module_path][LIT_CHARS /mod_perl.so]]} ) (Com {[LIT_CHARS sane_grep]} {[SQ ]} {[DQ [VarSub root][LIT_CHARS /gitweb.cgi]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "LoadModule perl_module "][VarSub module_path][LIT_CHARS "/mod_perl.so\n"][LIT_CHARS "PerlPassEnv GIT_DIR\n"][LIT_CHARS "PerlPassEnv GIT_EXEC_PATH\n"][LIT_CHARS "PerlPassEnv GITWEB_CONFIG\n"][LIT_CHARS "\n"][LIT_CHARS "\tSetHandler perl-script\n"][LIT_CHARS "\tPerlResponseHandler ModPerl::Registry\n"][LIT_CHARS "\tPerlOptions +ParseHeaders\n"][LIT_CHARS "\tOptions +ExecCGI\n"][LIT_CHARS "\n"]]} 0), > ) (ElseTrue) (List (Com {[LIT_CHARS resolve_full_httpd]} ) (= scope= flags=0 words=[] bindings=[('list_mods', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub full_httpd]]}) (Com {[LIT_CHARS sed]} {[SQ ]}) )]})]) (AndOr OP_OR_IF (Pipeline (Com {[VarSub list_mods]} ) (Com {[LIT_CHARS sane_grep]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub module_path][LIT_CHARS /mod_cgi.so]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "LoadModule cgi_module "][VarSub module_path][LIT_CHARS /mod_cgi.so]]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), > ) (ElseTrue) (List (AndOr OP_OR_IF (Pipeline (Com {[VarSub list_mods]} ) (Com {[LIT_CHARS grep]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub module_path][LIT_CHARS /mod_cgid.so]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "LoadModule cgid_module "][VarSub module_path][LIT_CHARS /mod_cgid.so]]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), > ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "You have no CGI support!"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 2]} ) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "ScriptSock logs/gitweb.sock"]]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), > ) ) ) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "PassEnv GIT_DIR\n"][LIT_CHARS "PassEnv GIT_EXEC_PATH\n"][LIT_CHARS "PassEnv GITWEB_CONFIG\n"][LIT_CHARS "AddHandler cgi-script .cgi\n"][LIT_CHARS "\n"][LIT_CHARS "\tOptions +ExecCGI\n"][LIT_CHARS "\n"]]} 0), > ) ) ) ) ) (FunctionDef mongoose_conf [] (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub conf]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "# Mongoose web server configuration file.\n"][LIT_CHARS "# Lines starting with '#' and empty lines are ignored.\n"][LIT_CHARS "# For detailed description of every option, visit\n"][LIT_CHARS "# http://code.google.com/p/mongoose/wiki/MongooseManual\n"][LIT_CHARS "\n"][LIT_CHARS "root\t\t"][VarSub root][LIT_CHARS "\n"][LIT_CHARS "ports\t\t"][VarSub port][LIT_CHARS "\n"][LIT_CHARS "index_files\tgitweb.cgi\n"][LIT_CHARS "#ssl_cert\t"][VarSub fqgitdir][LIT_CHARS "/gitweb/ssl_cert.pem\n"][LIT_CHARS "error_log\t"][VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS "/error.log\n"][LIT_CHARS "access_log\t"][VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS "/access.log\n"][LIT_CHARS "\n"][LIT_CHARS "#cgi setup\n"][LIT_CHARS "cgi_env\t\tPATH="][VarSub PATH][LIT_CHARS ",GIT_DIR="][VarSub GIT_DIR][LIT_CHARS ",GIT_EXEC_PATH="][VarSub GIT_EXEC_PATH][LIT_CHARS ",GITWEB_CONFIG="][VarSub GITWEB_CONFIG][LIT_CHARS "\n"][LIT_CHARS "cgi_interp\t"][VarSub PERL][LIT_CHARS "\n"][LIT_CHARS "cgi_ext\t\tcgi,pl\n"][LIT_CHARS "\n"][LIT_CHARS "# mimetype mapping\n"][LIT_CHARS "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"]]} 0), > ) ) (FunctionDef plackup_conf [] (List (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/gitweb.psgi]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!"][VarSub PERL][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# gitweb - simple web interface to track changes in git repositories\n"][LIT_CHARS "# PSGI wrapper and server starter (see http://plackperl.org)\n"][LIT_CHARS "\n"][LIT_CHARS "use strict;\n"][LIT_CHARS "\n"][LIT_CHARS "use IO::Handle;\n"][LIT_CHARS "use Plack::MIME;\n"][LIT_CHARS "use Plack::Builder;\n"][LIT_CHARS "use Plack::App::WrapCGI;\n"][LIT_CHARS "use CGI::Emulate::PSGI 0.07; # minimum version required to work with gitweb\n"][LIT_CHARS "\n"][LIT_CHARS "# mimetype mapping (from lighttpd_conf)\n"][LIT_CHARS "Plack::MIME->add_type(\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .pdf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/pdf][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .sig][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/pgp-signature][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .spl][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/futuresplash][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .class][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/octet-stream][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .ps][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/postscript][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .torrent][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bittorrent][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .dvi][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-dvi][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .gz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-gzip][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .pac][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-ns-proxy-autoconfig][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .swf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-shockwave-flash][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .tar.gz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-tgz][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .tgz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-tgz][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .tar][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-tar][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .zip][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/zip][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .mp3][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .m3u][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-mpegurl][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .wma][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-ms-wma][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .wax][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-ms-wax][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .ogg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/ogg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .wav][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS audio/x-wav][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .gif][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/gif][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .jpg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/jpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .jpeg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/jpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .png][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/png][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .xbm][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/x-xbitmap][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .xpm][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/x-xpixmap][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .xwd][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS image/x-xwindowdump][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .css][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/css][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .html][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/html][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .htm][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/html][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .js][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/javascript][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .asc][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .c][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .cpp][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .log][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .conf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .text][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .txt][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .dtd][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/xml][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .xml][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/xml][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .mpg][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/mpeg][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .mov][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/quicktime][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .qt][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/quicktime][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .avi][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-msvideo][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .asf][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-ms-asf][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .asx][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-ms-asf][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .wmv][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS video/x-ms-wmv][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .bz2][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bzip][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .tbz][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bzip-compressed-tar][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][LIT_CHARS .tar.bz2][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS application/x-bzip-compressed-tar][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t"][RIGHT_D_QUOTE "\""][RIGHT_D_QUOTE "\""][LIT_CHARS " => "][RIGHT_D_QUOTE "\""][LIT_CHARS text/plain][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS ");\n"][LIT_CHARS "\n"][LIT_CHARS "my "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "app = builder {\n"][LIT_CHARS "\t# to be able to override "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "SIG{__WARN__} to log build time warnings\n"][LIT_CHARS "\tuse CGI::Carp; # it sets "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "SIG{__WARN__} itself\n"][LIT_CHARS "\n"][LIT_CHARS "\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "logdir = "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS "\topen my "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "access_log_fh, '>>', "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS logdir/access.log][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\t\tor die "][RIGHT_D_QUOTE "\""][LIT_CHARS "Couldn't open access log '"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "logdir/access.log': "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "!"][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS "\topen my "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "error_log_fh, '>>', "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS logdir/error.log][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\t\tor die "][RIGHT_D_QUOTE "\""][LIT_CHARS "Couldn't open error log '"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "logdir/error.log': "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "!"][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS "\n"][LIT_CHARS "\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "access_log_fh->autoflush(1);\n"][LIT_CHARS "\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "error_log_fh->autoflush(1);\n"][LIT_CHARS "\n"][LIT_CHARS "\t# redirect build time warnings to error.log\n"][LIT_CHARS "\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "SIG{'__WARN__'} = sub {\n"][LIT_CHARS "\t\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "msg = shift;\n"][LIT_CHARS "\t\t# timestamp warning like in CGI::Carp::warn\n"][LIT_CHARS "\t\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "stamp = CGI::Carp::stamp();\n"][LIT_CHARS "\t\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "msg =~ s/^/"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "stamp/gm;\n"][LIT_CHARS "\t\tprint "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "error_log_fh "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "msg;\n"][LIT_CHARS "\t};\n"][LIT_CHARS "\n"][LIT_CHARS "\t# write errors to error.log, access to access.log\n"][LIT_CHARS "\tenable 'AccessLog',\n"][LIT_CHARS "\t\tformat => "][RIGHT_D_QUOTE "\""][LIT_CHARS combined][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t\tlogger => sub { print "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "access_log_fh @_; };\n"][LIT_CHARS "\tenable sub {\n"][LIT_CHARS "\t\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "app = shift;\n"][LIT_CHARS "\t\tsub {\n"][LIT_CHARS "\t\t\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "env = shift;\n"][LIT_CHARS "\t\t\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "env->{'psgi.errors'} = "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "error_log_fh;\n"][LIT_CHARS "\t\t\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "app->("][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "env);\n"][LIT_CHARS "\t\t}\n"][LIT_CHARS "\t};\n"][LIT_CHARS "\t# gitweb currently doesn't work with "][VarSub SIG][LIT_CHARS "{CHLD} set to 'IGNORE',\n"][LIT_CHARS "\t# because it uses 'close "][VarSub fd][LIT_CHARS " or die...' on piped filehandle "][VarSub fh][LIT_CHARS "\n"][LIT_CHARS "\t# (which causes the parent process to wait for child to finish).\n"][LIT_CHARS "\tenable_if { "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "SIG{'CHLD'} eq 'IGNORE' } sub {\n"][LIT_CHARS "\t\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "app = shift;\n"][LIT_CHARS "\t\tsub {\n"][LIT_CHARS "\t\t\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "env = shift;\n"][LIT_CHARS "\t\t\tlocal "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "SIG{'CHLD'} = 'DEFAULT';\n"][LIT_CHARS "\t\t\tlocal "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "SIG{'CLD'} = 'DEFAULT';\n"][LIT_CHARS "\t\t\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "app->("][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "env);\n"][LIT_CHARS "\t\t}\n"][LIT_CHARS "\t};\n"][LIT_CHARS "\t# serve static files, i.e. stylesheet, images, script\n"][LIT_CHARS "\tenable 'Static',\n"][LIT_CHARS "\t\tpath => sub { m!"][\ LIT_ESCAPED_CHAR "\\."][LIT_CHARS "(js|css|png)"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "! && s!^/gitweb/!! },\n"][LIT_CHARS "\t\troot => "][RIGHT_D_QUOTE "\""][VarSub root][LIT_CHARS /][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS "\t\tencoding => 'utf-8'; # encoding for 'text/plain' files\n"][LIT_CHARS "\t# convert CGI application to PSGI app\n"][LIT_CHARS "\tPlack::App::WrapCGI->new(script => "][RIGHT_D_QUOTE "\""][VarSub root][LIT_CHARS /gitweb.cgi][RIGHT_D_QUOTE "\""][LIT_CHARS ")->to_app;\n"][LIT_CHARS "};\n"][LIT_CHARS "\n"][LIT_CHARS "# make it runnable as standalone app,\n"][LIT_CHARS "# like it would be run via 'plackup' utility\n"][LIT_CHARS "if (caller) {\n"][LIT_CHARS "\treturn "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "app;\n"][LIT_CHARS "} else {\n"][LIT_CHARS "\trequire Plack::Runner;\n"][LIT_CHARS "\n"][LIT_CHARS "\tmy "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "runner = Plack::Runner->new();\n"][LIT_CHARS "\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "runner->parse_options(qw(--env deployment --port "][VarSub port][LIT_CHARS "),\n"][LIT_CHARS "\t\t\t\t"][RIGHT_D_QUOTE "\""][VarSub local][RIGHT_D_QUOTE "\""][LIT_CHARS " ? qw(--host 127.0.0.1) : ());\n"][LIT_CHARS "\t"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "runner->run("][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "app);\n"][LIT_CHARS "}\n"][LIT_CHARS "__END__\n"]]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_CHARS a] [LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/gitweb.psgi]]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub conf]]} ) ) ) (FunctionDef gitweb_conf [] (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/gitweb_config.perl]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/usr/bin/perl\n"][LIT_CHARS "our "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "projectroot = "][RIGHT_D_QUOTE "\""][ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub fqgitdir]]})][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS "our "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "git_temp = "][RIGHT_D_QUOTE "\""][VarSub fqgitdir][LIT_CHARS /gitweb/tmp][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS "our "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "projects_list = "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "projectroot;\n"][LIT_CHARS "\n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "feature{'remote_heads'}{'default'} = [1];\n"]]} 0), > ) ) (FunctionDef configure_httpd [] (Case to_match={[DQ [VarSub httpd]]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_CHARS lighttpd] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [LIT_CHARS apache2] [LIT_OTHER "*"]}, {[LIT_OTHER "*"] [LIT_CHARS httpd] [LIT_OTHER "*"]}], [{[LIT_CHARS webrick]}], [{[LIT_OTHER "*"] [LIT_CHARS mongoose] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [LIT_CHARS plackup] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS lighttpd_conf]} ) (Com {[LIT_CHARS apache2_conf]} ) (Com {[LIT_CHARS webrick_conf]} ) (Com {[LIT_CHARS mongoose_conf]} ) (Com {[LIT_CHARS plackup_conf]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Unknown httpd specified: "][VarSub httpd]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) (Case to_match={[DQ [VarSub action]]}, pat_word_list=[[{[LIT_CHARS stop]}], [{[LIT_CHARS start]}], [{[LIT_CHARS restart]}]] (List (Com {[LIT_CHARS stop_httpd]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS start_httpd]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS stop_httpd]} ) (Com {[LIT_CHARS start_httpd]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) ) (Com {[LIT_CHARS gitweb_conf]} ) (Com {[LIT_CHARS resolve_full_httpd]} ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only]]} ) (= scope= flags=0 words=[] bindings=[('conf', {[DQ [VarSub fqgitdir][LIT_CHARS /gitweb/][VarSub httpd_only][LIT_CHARS .conf]]})]) (Com {[LIT_CHARS configure_httpd]} ) (Com {[LIT_CHARS start_httpd]} ) (= scope= flags=0 words=[] bindings=[('url', {[LIT_CHARS http] [LIT_OTHER ":"] [LIT_CHARS //127.0.0.1] [LIT_OTHER ":"] [VarSub port]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub browser]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS httpd_is_ready]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS web--browse]} {[LIT_CHARS -b]} {[DQ [VarSub browser]]} {[VarSub url]} ) (Com {[LIT_CHARS echo]} {[VarSub url]} ) ) ) (ElseTrue) (AndOr OP_AND_IF (Com {[LIT_CHARS httpd_is_ready]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS web--browse]} {[LIT_CHARS -c]} {[DQ [LIT_CHARS instaweb.browser]]} {[VarSub url]} ) (Com {[LIT_CHARS echo]} {[VarSub url]} ) ) ) ) )