summaryrefslogtreecommitdiffstats
path: root/src/browse.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/browse.py')
-rwxr-xr-xsrc/browse.py33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/browse.py b/src/browse.py
index 9e59bd8..32792f3 100755
--- a/src/browse.py
+++ b/src/browse.py
@@ -26,12 +26,16 @@ try:
import http.server as httpserver
except ImportError:
import BaseHTTPServer as httpserver
+import argparse
import os
import socket
import subprocess
import sys
import webbrowser
-import urllib2
+try:
+ from urllib.request import unquote
+except ImportError:
+ from urllib2 import unquote
from collections import namedtuple
Node = namedtuple('Node', ['inputs', 'rule', 'target', 'outputs'])
@@ -146,19 +150,19 @@ def generate_html(node):
return '\n'.join(document)
def ninja_dump(target):
- proc = subprocess.Popen([sys.argv[1], '-t', 'query', target],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ cmd = [args.ninja_command, '-f', args.f, '-t', 'query', target]
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
return proc.communicate() + (proc.returncode,)
class RequestHandler(httpserver.BaseHTTPRequestHandler):
def do_GET(self):
assert self.path[0] == '/'
- target = urllib2.unquote(self.path[1:])
+ target = unquote(self.path[1:])
if target == '':
self.send_response(302)
- self.send_header('Location', '?' + sys.argv[2])
+ self.send_header('Location', '?' + args.initial_target)
self.end_headers()
return
@@ -182,13 +186,28 @@ class RequestHandler(httpserver.BaseHTTPRequestHandler):
def log_message(self, format, *args):
pass # Swallow console spam.
-port = 8000
+parser = argparse.ArgumentParser(prog='ninja -t browse')
+parser.add_argument('--port', '-p', default=8000, type=int,
+ help='Port number to use (default %(default)d)')
+parser.add_argument('--no-browser', action='store_true',
+ help='Do not open a webbrowser on startup.')
+
+parser.add_argument('--ninja-command', default='ninja',
+ help='Path to ninja binary (default %(default)s)')
+parser.add_argument('-f', default='build.ninja',
+ help='Path to build.ninja file (default %(default)s)')
+parser.add_argument('initial_target', default='all', nargs='?',
+ help='Initial target to show (default %(default)s)')
+
+args = parser.parse_args()
+port = args.port
httpd = httpserver.HTTPServer(('',port), RequestHandler)
try:
hostname = socket.gethostname()
print('Web server running on %s:%d, ctl-C to abort...' % (hostname,port) )
print('Web server pid %d' % os.getpid(), file=sys.stderr )
- webbrowser.open_new('http://%s:%s' % (hostname, port) )
+ if not args.no_browser:
+ webbrowser.open_new('http://%s:%s' % (hostname, port) )
httpd.serve_forever()
except KeyboardInterrupt:
print()