зеркало из https://github.com/microsoft/clang-1.git
scan-view tweaks:
- Update for scan-build table change. - Add --auto-reload option (for development, avoids need to restart server). - Always send Last-Modified, with a reasonable value for dynamic content. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56409 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
12a467ff0b
Коммит
cb028b0180
|
@ -15,10 +15,15 @@ import Reporter
|
||||||
|
|
||||||
# Keys replaced by server.
|
# Keys replaced by server.
|
||||||
|
|
||||||
|
kReportColRE = re.compile('<!-- REPORTBUGCOL -->')
|
||||||
|
kReportColRepl = '<td></td>'
|
||||||
kReportBugRE = re.compile('<!-- REPORTBUG id="report-(.*)\\.html" -->')
|
kReportBugRE = re.compile('<!-- REPORTBUG id="report-(.*)\\.html" -->')
|
||||||
kReportBugRepl = '<td class="ReportBug"><a href="report/\\1">Report Bug</a></td>'
|
kReportBugRepl = '<td class="ReportBug"><a href="report/\\1">Report Bug</a></td>'
|
||||||
kBugKeyValueRE = re.compile('<!-- BUG([^ ]*) (.*) -->')
|
kBugKeyValueRE = re.compile('<!-- BUG([^ ]*) (.*) -->')
|
||||||
|
|
||||||
|
kReportReplacements = [(kReportColRE, kReportColRepl),
|
||||||
|
(kReportBugRE, kReportBugRepl)]
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
__version__ = "0.1"
|
__version__ = "0.1"
|
||||||
|
@ -88,6 +93,12 @@ class ScanViewServer(BaseHTTPServer.HTTPServer):
|
||||||
except OSError,e:
|
except OSError,e:
|
||||||
print 'OSError',e.errno
|
print 'OSError',e.errno
|
||||||
|
|
||||||
|
def finish_request(self, request, client_address):
|
||||||
|
if self.options.autoReload:
|
||||||
|
import ScanView
|
||||||
|
self.RequestHandlerClass = reload(ScanView).ScanViewRequestHandler
|
||||||
|
BaseHTTPServer.HTTPServer.finish_request(self, request, client_address)
|
||||||
|
|
||||||
def handle_error(self, request, client_address):
|
def handle_error(self, request, client_address):
|
||||||
# Ignore socket errors
|
# Ignore socket errors
|
||||||
info = sys.exc_info()
|
info = sys.exc_info()
|
||||||
|
@ -95,7 +106,7 @@ class ScanViewServer(BaseHTTPServer.HTTPServer):
|
||||||
if self.options.debug > 1:
|
if self.options.debug > 1:
|
||||||
print >>sys.stderr, "%s: SERVER: ignored socket error." % (sys.argv[0],)
|
print >>sys.stderr, "%s: SERVER: ignored socket error." % (sys.argv[0],)
|
||||||
return
|
return
|
||||||
BaseHTTPServer.HTTPServer.handle_error(request, client_address)
|
BaseHTTPServer.HTTPServer.handle_error(self, request, client_address)
|
||||||
|
|
||||||
# Borrowed from Quixote, with simplifications.
|
# Borrowed from Quixote, with simplifications.
|
||||||
def parse_query(qs, fields=None):
|
def parse_query(qs, fields=None):
|
||||||
|
@ -114,6 +125,7 @@ def parse_query(qs, fields=None):
|
||||||
|
|
||||||
class ScanViewRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
class ScanViewRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
||||||
server_version = "ScanViewServer/" + __version__
|
server_version = "ScanViewServer/" + __version__
|
||||||
|
dynamic_mtime = time.time()
|
||||||
|
|
||||||
def do_HEAD(self):
|
def do_HEAD(self):
|
||||||
try:
|
try:
|
||||||
|
@ -382,8 +394,9 @@ Method: <select id="reporter" name="reporter" onChange="updateReporterOptions()"
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header("Content-type", ctype)
|
self.send_header("Content-type", ctype)
|
||||||
self.send_header("Content-Length", str(len(s)))
|
self.send_header("Content-Length", str(len(s)))
|
||||||
if mtime:
|
if mtime is None:
|
||||||
self.send_header("Last-Modified", self.date_time_string(mtime))
|
mtime = self.dynamic_mtime
|
||||||
|
self.send_header("Last-Modified", self.date_time_string(mtime))
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
return StringIO.StringIO(s)
|
return StringIO.StringIO(s)
|
||||||
|
|
||||||
|
@ -391,7 +404,8 @@ Method: <select id="reporter" name="reporter" onChange="updateReporterOptions()"
|
||||||
f = open(path,'r')
|
f = open(path,'r')
|
||||||
fs = os.fstat(f.fileno())
|
fs = os.fstat(f.fileno())
|
||||||
data = f.read()
|
data = f.read()
|
||||||
data = kReportBugRE.sub(kReportBugRepl, data)
|
for a,b in kReportReplacements:
|
||||||
|
data = a.sub(b, data)
|
||||||
return self.send_string(data, ctype, mtime=fs.st_mtime)
|
return self.send_string(data, ctype, mtime=fs.st_mtime)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,9 @@ def main():
|
||||||
parser.add_option("--debug", dest="debug", default=0,
|
parser.add_option("--debug", dest="debug", default=0,
|
||||||
action="count",
|
action="count",
|
||||||
help="Print additional debugging information.")
|
help="Print additional debugging information.")
|
||||||
|
parser.add_option("--auto-reload", dest="autoReload", default=False,
|
||||||
|
action="store_true",
|
||||||
|
help="Automatically update module for each request.")
|
||||||
parser.add_option("--no-browser", dest="startBrowser", default=True,
|
parser.add_option("--no-browser", dest="startBrowser", default=True,
|
||||||
action="store_false",
|
action="store_false",
|
||||||
help="Don't open a webbrowser on startup.")
|
help="Don't open a webbrowser on startup.")
|
||||||
|
|
Загрузка…
Ссылка в новой задаче