annotate mercurial/ui.py @ 3409:1ae738bacf74

Fixed page overlap for file revision links in hgweb. This is another step to fix issue189, but currently the file revision numbers are read as changeset revision numbers, so the link will point to the wrong revision.
author Thomas Arendsen Hein <thomas@intevation.de>
date Mon, 16 Oct 2006 09:53:31 +0200
parents 9e834d039681
children ec6f400cff4d
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 #
2858
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2738
diff changeset
3 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
207
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
1400
cf9a1233738a i18n first part: make '_' available for files who need it
Benoit Boissinot <benoit.boissinot@ens-lyon.org
parents: 1292
diff changeset
8 from i18n import gettext as _
613
5374955ec5b1 Demand-load most modules in the commands and ui modules.
Bryan O'Sullivan <bos@serpentine.com>
parents: 608
diff changeset
9 from demandload import *
2909
20b95aef3fe0 Move ui.sendmail to mail.connect/sendmail
Matt Mackall <mpm@selenic.com>
parents: 2908
diff changeset
10 demandload(globals(), "errno getpass os re socket sys tempfile")
3384
9e834d039681 Removed unused imports of mdiff and templater from ui.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3348
diff changeset
11 demandload(globals(), "ConfigParser traceback util")
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
12
3342
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
13 def dupconfig(orig):
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
14 new = ConfigParser.SafeConfigParser(orig.defaults())
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
15 updateconfig(orig, new)
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
16 return new
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
17
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
18 def updateconfig(source, dest):
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
19 for section in source.sections():
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
20 if not dest.has_section(section):
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
21 dest.add_section(section)
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
22 for name, value in source.items(section, raw=True):
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
23 dest.set(section, name, value)
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
24
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 1483
diff changeset
25 class ui(object):
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
26 def __init__(self, verbose=False, debug=False, quiet=False,
3011
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3010
diff changeset
27 interactive=True, traceback=False, parentui=None):
3342
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
28 self.overlay = None
3337
0e3c45a74683 ui.py: don't let parent and child ui objects share header and prev_header
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3336
diff changeset
29 self.header = []
0e3c45a74683 ui.py: don't let parent and child ui objects share header and prev_header
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3336
diff changeset
30 self.prev_header = []
1839
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
31 if parentui is None:
1874
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
32 # this is the parent of all ui children
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
33 self.parentui = None
3011
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3010
diff changeset
34 self.readhooks = []
3348
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
35 self.quiet = quiet
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
36 self.verbose = verbose
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
37 self.debugflag = debug
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
38 self.interactive = interactive
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
39 self.traceback = traceback
1874
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
40 self.cdata = ConfigParser.SafeConfigParser()
1951
696230e52e4d add HGRCPATH env var, list of places to look for hgrc files.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1938
diff changeset
41 self.readconfig(util.rcpath())
1839
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
42 self.updateopts(verbose, debug, quiet, interactive)
1866
89a6ce5ae510 inherit hgrc so "%" interpolation works.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1840
diff changeset
43 else:
1874
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
44 # parentui may point to an ui object which is already a child
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
45 self.parentui = parentui.parentui or parentui
3336
1b6d0fa84e0d ui.py: use correct parentui while copying readhooks
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3100
diff changeset
46 self.readhooks = self.parentui.readhooks[:]
3342
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
47 self.cdata = dupconfig(self.parentui.cdata)
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
48 if self.parentui.overlay:
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
49 self.overlay = dupconfig(self.parentui.overlay)
1839
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
50
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
51 def __getattr__(self, key):
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
52 return getattr(self.parentui, key)
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
53
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
54 def updateopts(self, verbose=False, debug=False, quiet=False,
2293
3dc6f2501dbc add --config global option. allows to set hgrc option on command line.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2292
diff changeset
55 interactive=True, traceback=False, config=[]):
3344
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3343
diff changeset
56 for section, name, value in config:
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3343
diff changeset
57 self.setconfig(section, name, value)
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
58
3348
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
59 if quiet or verbose or debug:
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
60 self.setconfig('ui', 'quiet', str(bool(quiet)))
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
61 self.setconfig('ui', 'verbose', str(bool(verbose)))
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
62 self.setconfig('ui', 'debug', str(bool(debug)))
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
63
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
64 self.verbosity_constraints()
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
65
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
66 if not interactive:
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
67 self.setconfig('ui', 'interactive', 'False')
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
68 self.interactive = False
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
69
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
70 self.traceback = self.traceback or traceback
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
71
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
72 def verbosity_constraints(self):
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
73 self.quiet = self.configbool('ui', 'quiet')
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
74 self.verbose = self.configbool('ui', 'verbose')
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
75 self.debugflag = self.configbool('ui', 'debug')
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
76
3347
25d270e0b27f ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
77 if self.debugflag:
25d270e0b27f ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
78 self.verbose = True
25d270e0b27f ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
79 self.quiet = False
25d270e0b27f ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
80 elif self.verbose and self.quiet:
3348
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
81 self.quiet = self.verbose = False
3347
25d270e0b27f ui.py: untangle updateopts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
82
1893
6569651a4f1e Read paths specified in .hg/hgrc relative to repo root, otherwise to home dir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1892
diff changeset
83 def readconfig(self, fn, root=None):
1483
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
84 if isinstance(fn, basestring):
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
85 fn = [fn]
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
86 for f in fn:
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
87 try:
3099
c27d1e1798a3 Back out trusted hgrc change for now
Matt Mackall <mpm@selenic.com>
parents: 3010
diff changeset
88 self.cdata.read(f)
1483
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
89 except ConfigParser.ParsingError, inst:
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
90 raise util.Abort(_("Failed to parse %s\n%s") % (f, inst))
3342
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
91 # override data from config files with data set with ui.setconfig
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
92 if self.overlay:
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
93 updateconfig(self.overlay, self.cdata)
3345
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
94 if root is None:
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
95 root = os.path.expanduser('~')
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
96 self.fixconfig(root=root)
2944
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2738
diff changeset
97 for hook in self.readhooks:
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2738
diff changeset
98 hook(self)
337
c3d873ef4b31 Add support for .hg/hgrc file
mpm@selenic.com
parents: 285
diff changeset
99
3011
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3010
diff changeset
100 def addreadhook(self, hook):
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3010
diff changeset
101 self.readhooks.append(hook)
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3010
diff changeset
102
3345
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
103 def fixconfig(self, section=None, name=None, value=None, root=None):
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
104 # translate paths relative to root (or home) into absolute paths
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
105 if section is None or section == 'paths':
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
106 if root is None:
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
107 root = os.getcwd()
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
108 items = section and [(name, value)] or []
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
109 for cdata in self.cdata, self.overlay:
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
110 if not cdata: continue
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
111 if not items and cdata.has_section('paths'):
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
112 pathsitems = cdata.items('paths')
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
113 else:
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
114 pathsitems = items
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
115 for n, path in pathsitems:
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
116 if path and "://" not in path and not os.path.isabs(path):
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
117 cdata.set("paths", n, os.path.join(root, path))
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
118
3348
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
119 # update quiet/verbose/debug and interactive status
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
120 if section is None or section == 'ui':
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
121 if name is None or name in ('quiet', 'verbose', 'debug'):
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
122 self.verbosity_constraints()
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
123
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
124 if name is None or name == 'interactive':
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
125 self.interactive = self.configbool("ui", "interactive", True)
ab900698b832 update ui.quiet/verbose/debug/interactive every time the config changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3347
diff changeset
126
3342
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
127 def setconfig(self, section, name, value):
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
128 if not self.overlay:
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
129 self.overlay = ConfigParser.SafeConfigParser()
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
130 for cdata in (self.overlay, self.cdata):
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
131 if not cdata.has_section(section):
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
132 cdata.add_section(section)
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3341
diff changeset
133 cdata.set(section, name, value)
3345
bce7c1b4c1c8 ui.py: normalize settings every time the configuration changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3344
diff changeset
134 self.fixconfig(section, name, value)
960
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
135
3339
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
136 def _config(self, section, name, default, funcname):
960
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
137 if self.cdata.has_option(section, name):
1876
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
138 try:
3339
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
139 func = getattr(self.cdata, funcname)
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
140 return func(section, name)
1876
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
141 except ConfigParser.InterpolationError, inst:
3070
24c1db20990c Include section name and parameter name (if available) in config errors.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3035
diff changeset
142 raise util.Abort(_("Error in configuration section [%s] "
24c1db20990c Include section name and parameter name (if available) in config errors.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3035
diff changeset
143 "parameter '%s':\n%s")
24c1db20990c Include section name and parameter name (if available) in config errors.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3035
diff changeset
144 % (section, name, inst))
3341
ab406cfa1b99 ui.py: don't query parentui.cdata when looking up config items.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3340
diff changeset
145 return default
3339
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
146
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
147 def config(self, section, name, default=None):
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
148 return self._config(section, name, default, 'get')
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
149
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
150 def configbool(self, section, name, default=False):
a7cec14c9b40 ui.py: move common code out of config and configbool
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3338
diff changeset
151 return self._config(section, name, default, 'getboolean')
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
152
2499
894435215344 Added ui.configlist method to get comma/space separated lists of strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2498
diff changeset
153 def configlist(self, section, name, default=None):
894435215344 Added ui.configlist method to get comma/space separated lists of strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2498
diff changeset
154 """Return a list of comma/space separated strings"""
894435215344 Added ui.configlist method to get comma/space separated lists of strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2498
diff changeset
155 result = self.config(section, name)
894435215344 Added ui.configlist method to get comma/space separated lists of strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2498
diff changeset
156 if result is None:
2502
18cf95ad3666 Allow using default values with ui.configlist, too, and add a test for this.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2499
diff changeset
157 result = default or []
18cf95ad3666 Allow using default values with ui.configlist, too, and add a test for this.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2499
diff changeset
158 if isinstance(result, basestring):
18cf95ad3666 Allow using default values with ui.configlist, too, and add a test for this.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2499
diff changeset
159 result = result.replace(",", " ").split()
18cf95ad3666 Allow using default values with ui.configlist, too, and add a test for this.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2499
diff changeset
160 return result
2499
894435215344 Added ui.configlist method to get comma/space separated lists of strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2498
diff changeset
161
2343
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
162 def has_config(self, section):
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
163 '''tell whether section exists in config.'''
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
164 return self.cdata.has_section(section)
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
165
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
166 def configitems(self, section):
1839
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
167 items = {}
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
168 if self.cdata.has_section(section):
1876
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
169 try:
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
170 items.update(dict(self.cdata.items(section)))
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
171 except ConfigParser.InterpolationError, inst:
3070
24c1db20990c Include section name and parameter name (if available) in config errors.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3035
diff changeset
172 raise util.Abort(_("Error in configuration section [%s]:\n%s")
24c1db20990c Include section name and parameter name (if available) in config errors.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3035
diff changeset
173 % (section, inst))
1839
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
174 x = items.items()
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
175 x.sort()
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
176 return x
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
177
3341
ab406cfa1b99 ui.py: don't query parentui.cdata when looking up config items.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3340
diff changeset
178 def walkconfig(self):
3340
4eeb79b4da30 ui.py: make walkconfig use configitems
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3339
diff changeset
179 sections = self.cdata.sections()
4eeb79b4da30 ui.py: make walkconfig use configitems
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3339
diff changeset
180 sections.sort()
4eeb79b4da30 ui.py: make walkconfig use configitems
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3339
diff changeset
181 for section in sections:
4eeb79b4da30 ui.py: make walkconfig use configitems
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3339
diff changeset
182 for name, value in self.configitems(section):
4eeb79b4da30 ui.py: make walkconfig use configitems
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3339
diff changeset
183 yield section, name, value.replace('\n', '\\n')
1028
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
184
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
185 def extensions(self):
2403
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
186 result = self.configitems("extensions")
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
187 for i, (key, value) in enumerate(result):
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
188 if value:
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
189 result[i] = (key, os.path.expanduser(value))
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
190 return result
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
191
2003
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
192 def hgignorefiles(self):
2403
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
193 result = []
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
194 for key, value in self.configitems("ui"):
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
195 if key == 'ignore' or key.startswith('ignore.'):
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
196 result.append(os.path.expanduser(value))
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
197 return result
2003
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
198
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
199 def configrevlog(self):
2403
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
200 result = {}
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
201 for key, value in self.configitems("revlog"):
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
202 result[key.lower()] = value
9b0747207925 Further cleanup of ui.py (changeset 74d569332f8b used one-char variable names).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2390
diff changeset
203 return result
2388
74d569332f8b Cleanup: unifiy the coding style in the ui.py configitems forwarders.
Markus F.X.J. Oberhumer <markus@oberhumer.com>
parents: 2343
diff changeset
204
608
d2994b5298fb Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents: 565
diff changeset
205 def username(self):
1985
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
206 """Return default username to be used in commits.
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
207
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
208 Searched in this order: $HGUSER, [ui] section of hgrcs, $EMAIL
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
209 and stop searching if one of these is set.
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
210 Abort if found username is an empty string to force specifying
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
211 the commit user elsewhere, e.g. with line option or repo hgrc.
2343
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
212 If not found, use ($LOGNAME or $USER or $LNAME or
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
213 $USERNAME) +"@full.hostname".
1985
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
214 """
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
215 user = os.environ.get("HGUSER")
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
216 if user is None:
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
217 user = self.config("ui", "username")
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
218 if user is None:
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
219 user = os.environ.get("EMAIL")
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
220 if user is None:
2343
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
221 try:
2645
e6a41cbaa260 fix windows username problem.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2624
diff changeset
222 user = '%s@%s' % (util.getuser(), socket.getfqdn())
2343
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
223 except KeyError:
af81d8770620 add ui.has_config method.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2335
diff changeset
224 raise util.Abort(_("Please specify a username."))
1985
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
225 return user
608
d2994b5298fb Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents: 565
diff changeset
226
1129
ee4f60abad93 Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1071
diff changeset
227 def shortuser(self, user):
ee4f60abad93 Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1071
diff changeset
228 """Return a short representation of a user name or email address."""
1903
e4abeafd6eb1 move shortuser into util module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1637
diff changeset
229 if not self.verbose: user = util.shortuser(user)
1129
ee4f60abad93 Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1071
diff changeset
230 return user
ee4f60abad93 Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1071
diff changeset
231
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2470
diff changeset
232 def expandpath(self, loc, default=None):
1892
622ee75cb4c9 Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1882
diff changeset
233 """Return repository location relative to cwd or from [paths]"""
2624
46e52bbb9b1a expand the path if destination is not a directory
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2598
diff changeset
234 if "://" in loc or os.path.isdir(loc):
1892
622ee75cb4c9 Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1882
diff changeset
235 return loc
622ee75cb4c9 Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1882
diff changeset
236
2495
4a2a4d988ead make ui.expandpath better with default path.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
237 path = self.config("paths", loc)
4a2a4d988ead make ui.expandpath better with default path.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
238 if not path and default is not None:
4a2a4d988ead make ui.expandpath better with default path.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
239 path = self.config("paths", default)
2498
1e2ec4fd16df Fix ui.expandpath problem and broken test introduced by 4a2a4d988ead.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2495
diff changeset
240 return path or loc
506
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
241
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
242 def write(self, *args):
2033
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
243 if self.header:
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
244 if self.header != self.prev_header:
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
245 self.prev_header = self.header
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
246 self.write(*self.header)
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
247 self.header = []
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
248 for a in args:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
249 sys.stdout.write(str(a))
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
250
2033
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
251 def write_header(self, *args):
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
252 for a in args:
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
253 self.header.append(str(a))
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2013
diff changeset
254
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
255 def write_err(self, *args):
1989
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
256 try:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
257 if not sys.stdout.closed: sys.stdout.flush()
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
258 for a in args:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
259 sys.stderr.write(str(a))
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
260 except IOError, inst:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
261 if inst.errno != errno.EPIPE:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
262 raise
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
263
1837
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1637
diff changeset
264 def flush(self):
2013
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
265 try: sys.stdout.flush()
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
266 except: pass
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
267 try: sys.stderr.flush()
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
268 except: pass
1837
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1637
diff changeset
269
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
270 def readline(self):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
271 return sys.stdin.readline()[:-1]
2281
7761597b5da3 prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2206
diff changeset
272 def prompt(self, msg, pat=None, default="y"):
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
273 if not self.interactive: return default
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
274 while 1:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
275 self.write(msg, " ")
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
276 r = self.readline()
2281
7761597b5da3 prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2206
diff changeset
277 if not pat or re.match(pat, r):
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
278 return r
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
279 else:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
280 self.write(_("unrecognized response\n"))
2281
7761597b5da3 prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2206
diff changeset
281 def getpass(self, prompt=None, default=None):
7761597b5da3 prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2206
diff changeset
282 if not self.interactive: return default
7761597b5da3 prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2206
diff changeset
283 return getpass.getpass(prompt or _('password: '))
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
284 def status(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
285 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
286 def warn(self, *msg):
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
287 self.write_err(*msg)
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
288 def note(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
289 if self.verbose: self.write(*msg)
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
290 def debug(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
291 if self.debugflag: self.write(*msg)
1983
ae12a81549a7 Pass correct username as $HGUSER to hgeditor if "commit -u" is used.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1951
diff changeset
292 def edit(self, text, user):
2206
c74e91e81f70 Use text rather than binary mode for editing commit messages
Stephen Darnell <stephen@darnell.plus.com>
parents: 2201
diff changeset
293 (fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt",
c74e91e81f70 Use text rather than binary mode for editing commit messages
Stephen Darnell <stephen@darnell.plus.com>
parents: 2201
diff changeset
294 text=True)
1984
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
295 try:
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
296 f = os.fdopen(fd, "w")
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
297 f.write(text)
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
298 f.close()
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
299
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
300 editor = (os.environ.get("HGEDITOR") or
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
301 self.config("ui", "editor") or
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
302 os.environ.get("EDITOR", "vi"))
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
303
1984
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
304 util.system("%s \"%s\"" % (editor, name),
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
305 environ={'HGUSER': user},
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
306 onerr=util.Abort, errprefix=_("edit failed"))
608
d2994b5298fb Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents: 565
diff changeset
307
1984
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
308 f = open(name)
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
309 t = f.read()
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
310 f.close()
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
311 t = re.sub("(?m)^HG:.*\n", "", t)
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
312 finally:
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
313 os.unlink(name)
662
b55a78595ef6 Pass username to hgeditor, remove temporary file
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 613
diff changeset
314
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
315 return t
2200
9f43b6e24232 move mail sending code into core, so extensions can share it.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2166
diff changeset
316
2335
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2293
diff changeset
317 def print_exc(self):
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2293
diff changeset
318 '''print exception traceback if traceback printing enabled.
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2293
diff changeset
319 only to call in exception handler. returns true if traceback
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2293
diff changeset
320 printed.'''
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2293
diff changeset
321 if self.traceback:
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2293
diff changeset
322 traceback.print_exc()
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2293
diff changeset
323 return self.traceback