mercurial/ui.py
author mpm@selenic.com
Wed, 08 Jun 2005 20:11:57 -0800
changeset 293 11d64332a1cb
parent 285 5a1e6d27f399
child 337 c3d873ef4b31
child 349 b2293093b89e
permissions -rw-r--r--
hg help improvements -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 hg help improvements Handle showing option help in commands.py rather than fancyopts Show getopt exception string if argument parsing fails and call help Show help for invalid arguments Show exception string for invalid arguments with -d manifest hash: 9bd3e908cc080c21bb5e85822f675c35a8396fef -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCp8GNywK+sNU5EO8RAoJfAJ4pB0I4xH4CTuGmAwArfBzIsT9plACeImkm 4ml9x78fmPgKpDYIr/qhfVY= =YeZv -----END PGP SIGNATURE-----

# 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.

import os, sys, re, ConfigParser

class ui:
    def __init__(self, verbose=False, debug=False, quiet=False,
                 interactive=True):
        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)

    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 []

    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)
    def warn(self, *msg):
        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):
        import tempfile
        (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")
        r = os.system("%s %s" % (editor, name))

        if r:
            raise "Edit failed!"

        t = open(name).read()
        t = re.sub("(?m)^HG:.*\n", "", t)

        return t