annotate mercurial/ui.py @ 585:51626d888526

[PATCH] Changelogentry template cleanup -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [PATCH] Changelogentry template cleanup From: Edouard Gomez <edouard.gomez@gmail.com> Changelogentry template cleanup Removed unuseful outside div (was probably used to carry the parity class, it's no use, multiple css classes can be assigned to the inner table instead) Removed all hardwired styles in html tags. The style has been externalized to equivalent CSS classes. The inner table is now assigned the parity CSS class. Changed all relevant table cells from td to th. Added classes to all cells in order to give some semantic rationale to these table cells. manifest hash: 2835217df09be445961b865be166c2470173ba58 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCx1g5ywK+sNU5EO8RAhKGAKCWAHrx+lLMAXjd4/vgvG7vmfSkAACfTZ+m /EyUsDVaYeVcGzFsp8liReI= =vt2N -----END PGP SIGNATURE-----
author mpm@selenic.com
date Sat, 02 Jul 2005 19:15:05 -0800
parents 9a80418646dd
children d2994b5298fb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
1 # ui.py - user interface bits for mercurial
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
2 #
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
3 # Copyright 2005 Matt Mackall <mpm@selenic.com>
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
4 #
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
5 # This software may be used and distributed according to the terms
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
6 # of the GNU General Public License, incorporated herein by reference.
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
7
508
42a660abaf75 [PATCH] Harden os.system
mpm@selenic.com
parents: 506
diff changeset
8 import os, sys, re, ConfigParser, util
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
9
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
10 class ui:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
11 def __init__(self, verbose=False, debug=False, quiet=False,
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
12 interactive=True):
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
13 self.cdata = ConfigParser.SafeConfigParser()
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
14 self.cdata.read(os.path.expanduser("~/.hgrc"))
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
15
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
16 self.quiet = self.configbool("ui", "quiet")
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
17 self.verbose = self.configbool("ui", "verbose")
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
18 self.debugflag = self.configbool("ui", "debug")
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
19 self.interactive = self.configbool("ui", "interactive", True)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
20
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
21 self.quiet = (self.quiet or quiet) and not verbose and not debug
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
22 self.verbose = (self.verbose or verbose) or debug
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
23 self.debugflag = (self.debugflag or debug)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
24 self.interactive = (self.interactive and interactive)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
25
337
c3d873ef4b31 Add support for .hg/hgrc file
mpm@selenic.com
parents: 285
diff changeset
26 def readconfig(self, fp):
c3d873ef4b31 Add support for .hg/hgrc file
mpm@selenic.com
parents: 285
diff changeset
27 self.cdata.readfp(fp)
c3d873ef4b31 Add support for .hg/hgrc file
mpm@selenic.com
parents: 285
diff changeset
28
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
29 def config(self, section, val, default=None):
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
30 if self.cdata.has_option(section, val):
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
31 return self.cdata.get(section, val)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
32 return default
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
33
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
34 def configbool(self, section, val, default=False):
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
35 if self.cdata.has_option(section, val):
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
36 return self.cdata.getboolean(section, val)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
37 return default
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
38
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
39 def configitems(self, section):
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
40 if self.cdata.has_section(section):
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
41 return self.cdata.items(section)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
42 return []
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
43
506
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
44 def expandpath(self, loc):
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
45 paths = {}
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
46 for name, path in self.configitems("paths"):
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
47 paths[name] = path
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
48
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
49 return paths.get(loc, loc)
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
50
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
51 def write(self, *args):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
52 for a in args:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
53 sys.stdout.write(str(a))
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
54
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
55 def write_err(self, *args):
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
56 sys.stdout.flush()
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
57 for a in args:
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
58 sys.stderr.write(str(a))
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
59
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
60 def readline(self):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
61 return sys.stdin.readline()[:-1]
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
62 def prompt(self, msg, pat, default = "y"):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
63 if not self.interactive: return default
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
64 while 1:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
65 self.write(msg, " ")
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
66 r = self.readline()
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
67 if re.match(pat, r):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
68 return r
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
69 else:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
70 self.write("unrecognized response\n")
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
71 def status(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
72 if not self.quiet: self.write(*msg)
234
3427806d5ab9 ui.warn can use more than one argument like the other ui methods.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 207
diff changeset
73 def warn(self, *msg):
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
74 self.write_err(*msg)
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
75 def note(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
76 if self.verbose: self.write(*msg)
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
77 def debug(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
78 if self.debugflag: self.write(*msg)
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
79 def edit(self, text):
249
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 241
diff changeset
80 import tempfile
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
81 (fd, name) = tempfile.mkstemp("hg")
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
82 f = os.fdopen(fd, "w")
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
83 f.write(text)
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
84 f.close()
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
85
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
86 editor = os.environ.get("HGEDITOR") or os.environ.get("EDITOR", "vi")
508
42a660abaf75 [PATCH] Harden os.system
mpm@selenic.com
parents: 506
diff changeset
87 util.system("%s %s" % (editor, name), errprefix = "edit failed")
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
88
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
89 t = open(name).read()
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
90 t = re.sub("(?m)^HG:.*\n", "", t)
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
91
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
92 return t