diff --git a/mercurial/hgweb/hgwebdir_mod.py b/mercurial/hgweb/hgwebdir_mod.py --- a/mercurial/hgweb/hgwebdir_mod.py +++ b/mercurial/hgweb/hgwebdir_mod.py @@ -370,4 +370,7 @@ class hgwebdir(object): env['SERVER_NAME'] = u.host if u.port: env['SERVER_PORT'] = u.port - env['SCRIPT_NAME'] = '/' + u.path + path = u.path or "" + if not path.startswith('/'): + path = '/' + path + env['SCRIPT_NAME'] = path diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -539,12 +539,15 @@ class ui(object): except Exception: pass - # instead of trying to emulate raw_input, swap our in/out - # with sys.stdin/out - old = sys.stdout, sys.stdin - sys.stdout, sys.stdin = self.fout, self.fin - line = raw_input(prompt) - sys.stdout, sys.stdin = old + # call write() so output goes through subclassed implementation + # e.g. color extension on Windows + self.write(prompt) + + # instead of trying to emulate raw_input, swap self.fin with sys.stdin + old = sys.stdin + sys.stdin = self.fin + line = raw_input() + sys.stdin = old # When stdin is in binary mode on Windows, it can cause # raw_input() to emit an extra trailing carriage return