ui.py
86 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
/ mercurial / ui.py
mpm@selenic.com
|
r207 | # ui.py - user interface bits for mercurial | ||
# | ||||
# Copyright 2005 Matt Mackall <mpm@selenic.com> | ||||
# | ||||
# This software may be used and distributed according to the terms | ||||
# of the GNU General Public License, incorporated herein by reference. | ||||
mpm@selenic.com
|
r508 | import os, sys, re, ConfigParser, util | ||
mpm@selenic.com
|
r207 | |||
class ui: | ||||
def __init__(self, verbose=False, debug=False, quiet=False, | ||||
interactive=True): | ||||
mpm@selenic.com
|
r285 | self.cdata = ConfigParser.SafeConfigParser() | ||
self.cdata.read(os.path.expanduser("~/.hgrc")) | ||||
self.quiet = self.configbool("ui", "quiet") | ||||
self.verbose = self.configbool("ui", "verbose") | ||||
self.debugflag = self.configbool("ui", "debug") | ||||
self.interactive = self.configbool("ui", "interactive", True) | ||||
self.quiet = (self.quiet or quiet) and not verbose and not debug | ||||
self.verbose = (self.verbose or verbose) or debug | ||||
self.debugflag = (self.debugflag or debug) | ||||
self.interactive = (self.interactive and interactive) | ||||
mpm@selenic.com
|
r337 | def readconfig(self, fp): | ||
self.cdata.readfp(fp) | ||||
mpm@selenic.com
|
r285 | def config(self, section, val, default=None): | ||
if self.cdata.has_option(section, val): | ||||
return self.cdata.get(section, val) | ||||
return default | ||||
def configbool(self, section, val, default=False): | ||||
if self.cdata.has_option(section, val): | ||||
return self.cdata.getboolean(section, val) | ||||
return default | ||||
def configitems(self, section): | ||||
if self.cdata.has_section(section): | ||||
return self.cdata.items(section) | ||||
return [] | ||||
mpm@selenic.com
|
r506 | def expandpath(self, loc): | ||
paths = {} | ||||
for name, path in self.configitems("paths"): | ||||
paths[name] = path | ||||
return paths.get(loc, loc) | ||||
mpm@selenic.com
|
r207 | def write(self, *args): | ||
for a in args: | ||||
sys.stdout.write(str(a)) | ||||
def readline(self): | ||||
return sys.stdin.readline()[:-1] | ||||
def prompt(self, msg, pat, default = "y"): | ||||
if not self.interactive: return default | ||||
while 1: | ||||
self.write(msg, " ") | ||||
r = self.readline() | ||||
if re.match(pat, r): | ||||
return r | ||||
else: | ||||
self.write("unrecognized response\n") | ||||
def status(self, *msg): | ||||
if not self.quiet: self.write(*msg) | ||||
Thomas Arendsen Hein
|
r234 | def warn(self, *msg): | ||
mpm@selenic.com
|
r207 | self.write(*msg) | ||
def note(self, *msg): | ||||
if self.verbose: self.write(*msg) | ||||
def debug(self, *msg): | ||||
if self.debugflag: self.write(*msg) | ||||
def edit(self, text): | ||||
mpm@selenic.com
|
r249 | import tempfile | ||
mpm@selenic.com
|
r207 | (fd, name) = tempfile.mkstemp("hg") | ||
f = os.fdopen(fd, "w") | ||||
f.write(text) | ||||
f.close() | ||||
editor = os.environ.get("HGEDITOR") or os.environ.get("EDITOR", "vi") | ||||
mpm@selenic.com
|
r508 | util.system("%s %s" % (editor, name), errprefix = "edit failed") | ||
mpm@selenic.com
|
r207 | |||
t = open(name).read() | ||||
t = re.sub("(?m)^HG:.*\n", "", t) | ||||
return t | ||||