annotate mercurial/ui.py @ 2072:74d3f5336b66

Implement revlogng. revlogng results in smaller indexes, can address larger data files, and supports flags and version numbers. By default the original revlog format is used. To use the new format, use the following .hgrc field: [revlog] # format choices are 0 (classic revlog format) and 1 revlogng format=1
author mason@suse.com
date Tue, 04 Apr 2006 16:38:43 -0400
parents e3280d350792
children d0c02b4dce9a
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
1866
89a6ce5ae510 inherit hgrc so "%" interpolation works.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1840
diff changeset
8 import ConfigParser
1400
cf9a1233738a i18n first part: make '_' available for files who need it
Benoit Boissinot <benoit.boissinot@ens-lyon.org
parents: 1292
diff changeset
9 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
10 from demandload import *
1989
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
11 demandload(globals(), "errno os re socket sys tempfile util")
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
12
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 1483
diff changeset
13 class ui(object):
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
14 def __init__(self, verbose=False, debug=False, quiet=False,
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
15 interactive=True, parentui=None):
960
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
16 self.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
17 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
18 # 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
19 self.parentui = None
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
20 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
21 self.readconfig(util.rcpath())
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
22
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
23 self.quiet = self.configbool("ui", "quiet")
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
24 self.verbose = self.configbool("ui", "verbose")
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
25 self.debugflag = self.configbool("ui", "debug")
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
26 self.interactive = self.configbool("ui", "interactive", True)
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
27
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
28 self.updateopts(verbose, debug, quiet, interactive)
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
29 self.diffcache = None
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
30 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
31 self.prev_header = []
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
32 self.revlogopts = self.configrevlog()
1866
89a6ce5ae510 inherit hgrc so "%" interpolation works.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1840
diff changeset
33 else:
1874
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
34 # 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
35 self.parentui = parentui.parentui or parentui
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
36 parent_cdata = self.parentui.cdata
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
37 self.cdata = ConfigParser.SafeConfigParser(parent_cdata.defaults())
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
38 # make interpolation work
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
39 for section in parent_cdata.sections():
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.add_section(section)
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
41 for name, value in parent_cdata.items(section, raw=True):
a84829140fb1 Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1866
diff changeset
42 self.cdata.set(section, name, value)
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
43
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
44 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
45 return getattr(self.parentui, key)
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
46
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
47 def updateopts(self, verbose=False, debug=False, quiet=False,
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
48 interactive=True):
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
49 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
50 self.verbose = (self.verbose or verbose) or debug
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
51 self.debugflag = (self.debugflag or debug)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
52 self.interactive = (self.interactive and interactive)
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
53
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
54 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
55 if isinstance(fn, basestring):
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
56 fn = [fn]
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
57 for f in fn:
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
58 try:
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
59 self.cdata.read(f)
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
60 except ConfigParser.ParsingError, inst:
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1473
diff changeset
61 raise util.Abort(_("Failed to parse %s\n%s") % (f, inst))
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
62 # translate paths relative to root (or home) into absolute paths
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
63 if root is None:
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
64 root = os.path.expanduser('~')
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
65 for name, path in self.configitems("paths"):
1921
acce3f7e1779 Don't expand empty [paths] so later interpolation can do the right thing.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1893
diff changeset
66 if path and path.find("://") == -1 and not os.path.isabs(path):
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
67 self.cdata.set("paths", name, os.path.join(root, path))
337
c3d873ef4b31 Add support for .hg/hgrc file
mpm@selenic.com
parents: 285
diff changeset
68
960
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
69 def setconfig(self, section, name, val):
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
70 self.overlay[(section, name)] = val
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
71
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
72 def config(self, section, name, default=None):
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
73 if self.overlay.has_key((section, name)):
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
74 return self.overlay[(section, name)]
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
75 if self.cdata.has_option(section, name):
1876
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
76 try:
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
77 return self.cdata.get(section, name)
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
78 except ConfigParser.InterpolationError, inst:
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
79 raise util.Abort(_("Error in configuration:\n%s") % 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
80 if self.parentui is None:
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
81 return default
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
82 else:
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
83 return self.parentui.config(section, name, default)
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
84
960
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
85 def configbool(self, section, name, default=False):
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
86 if self.overlay.has_key((section, name)):
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
87 return self.overlay[(section, name)]
abfb5cc97fcd Add ui.setconfig overlay
mpm@selenic.com
parents: 953
diff changeset
88 if self.cdata.has_option(section, name):
1876
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
89 try:
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
90 return self.cdata.getboolean(section, name)
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
91 except ConfigParser.InterpolationError, inst:
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
92 raise util.Abort(_("Error in configuration:\n%s") % 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
93 if self.parentui is None:
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
94 return default
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
95 else:
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
96 return self.parentui.configbool(section, name, default)
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
97
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
98 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
99 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
100 if self.parentui is not None:
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
101 items = dict(self.parentui.configitems(section))
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
102 if self.cdata.has_section(section):
1876
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
103 try:
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
104 items.update(dict(self.cdata.items(section)))
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
105 except ConfigParser.InterpolationError, inst:
2e0fd78587bd Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1874
diff changeset
106 raise util.Abort(_("Error in configuration:\n%s") % 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
107 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
108 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
109 return x
285
5a1e6d27f399 ui: add configuration file support
mpm@selenic.com
parents: 249
diff changeset
110
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
111 def walkconfig(self, seen=None):
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
112 if seen is None:
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
113 seen = {}
1028
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
114 for (section, name), value in self.overlay.iteritems():
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
115 yield section, name, value
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
116 seen[section, name] = 1
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
117 for section in self.cdata.sections():
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
118 for name, value in self.cdata.items(section):
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
119 if (section, name) in seen: continue
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
120 yield section, name, value.replace('\n', '\\n')
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
121 seen[section, name] = 1
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
122 if self.parentui is not None:
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
123 for parent in self.parentui.walkconfig(seen):
876e4e6ad82b Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1637
diff changeset
124 yield parent
1028
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
125
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
126 def extensions(self):
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
127 return self.configitems("extensions")
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1062
diff changeset
128
2003
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
129 def hgignorefiles(self):
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
130 result = []
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
131 cfgitems = self.configitems("ui")
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
132 for key, value in cfgitems:
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
133 if key == 'ignore' or key.startswith('ignore.'):
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
134 path = os.path.expanduser(value)
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
135 result.append(path)
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
136 return result
62647394e368 Implementation of per-user .hgignore.
mcmillen@cs.cmu.edu
parents: 1989
diff changeset
137
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
138 def configrevlog(self):
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
139 ret = {}
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
140 for x in self.configitems("revlog"):
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
141 k = x[0].lower()
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
142 ret[k] = x[1]
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2033
diff changeset
143 return ret
1637
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
144 def diffopts(self):
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
145 if self.diffcache:
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
146 return self.diffcache
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
147 ret = { 'showfunc' : True, 'ignorews' : False}
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
148 for x in self.configitems("diff"):
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
149 k = x[0].lower()
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
150 v = x[1]
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
151 if v:
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
152 v = v.lower()
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
153 if v == 'true':
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
154 value = True
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
155 else:
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
156 value = False
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
157 ret[k] = value
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
158 self.diffcache = ret
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
159 return ret
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1609
diff changeset
160
608
d2994b5298fb Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents: 565
diff changeset
161 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
162 """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
163
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
164 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
165 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
166 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
167 the commit user elsewhere, e.g. with line option or repo hgrc.
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
168 If not found, use $LOGNAME or $USERNAME +"@full.hostname".
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
169 """
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
170 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
171 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
172 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
173 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
174 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
175 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
176 user = os.environ.get("LOGNAME") or os.environ.get("USERNAME")
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
177 if user:
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
178 user = "%s@%s" % (user, socket.getfqdn())
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
179 if not user:
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
180 raise util.Abort(_("Please specify a username."))
c577689006fa Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1984
diff changeset
181 return user
608
d2994b5298fb Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents: 565
diff changeset
182
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
183 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
184 """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
185 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
186 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
187
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
188 def expandpath(self, loc):
1892
622ee75cb4c9 Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1882
diff changeset
189 """Return repository location relative to cwd or from [paths]"""
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
190 if loc.find("://") != -1 or os.path.exists(loc):
1892
622ee75cb4c9 Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1882
diff changeset
191 return loc
622ee75cb4c9 Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1882
diff changeset
192
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
193 return self.config("paths", loc, loc)
506
1f81ebff98c9 [PATCH] Add ui.expandpath command
mpm@selenic.com
parents: 350
diff changeset
194
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
195 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
196 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
197 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
198 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
199 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
200 self.header = []
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
201 for a in args:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
202 sys.stdout.write(str(a))
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
203
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
204 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
205 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
206 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
207
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
208 def write_err(self, *args):
1989
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
209 try:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
210 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
211 for a in args:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
212 sys.stderr.write(str(a))
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
213 except IOError, inst:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
214 if inst.errno != errno.EPIPE:
0541768fa558 ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1985
diff changeset
215 raise
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
216
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
217 def flush(self):
2013
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
218 try: sys.stdout.flush()
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
219 except: pass
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
220 try: sys.stderr.flush()
65634e1038dd Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents: 2003
diff changeset
221 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
222
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
223 def readline(self):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
224 return sys.stdin.readline()[:-1]
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1028
diff changeset
225 def prompt(self, msg, pat, default="y"):
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
226 if not self.interactive: return default
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
227 while 1:
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
228 self.write(msg, " ")
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
229 r = self.readline()
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
230 if re.match(pat, r):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
231 return r
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
232 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
233 self.write(_("unrecognized response\n"))
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
234 def status(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
235 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
236 def warn(self, *msg):
565
9a80418646dd [PATCH] Make ui.warn write to stderr
mpm@selenic.com
parents: 515
diff changeset
237 self.write_err(*msg)
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
238 def note(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
239 if self.verbose: self.write(*msg)
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
240 def debug(self, *msg):
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
241 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
242 def edit(self, text, user):
1984
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
243 (fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt")
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
244 try:
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
245 f = os.fdopen(fd, "w")
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
246 f.write(text)
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
247 f.close()
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
248
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
249 editor = (os.environ.get("HGEDITOR") or
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
250 self.config("ui", "editor") or
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
251 os.environ.get("EDITOR", "vi"))
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
252
1984
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
253 util.system("%s \"%s\"" % (editor, name),
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
254 environ={'HGUSER': user},
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
255 onerr=util.Abort, errprefix=_("edit failed"))
608
d2994b5298fb Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents: 565
diff changeset
256
1984
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
257 f = open(name)
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
258 t = f.read()
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
259 f.close()
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
260 t = re.sub("(?m)^HG:.*\n", "", t)
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
261 finally:
df7436f439a0 Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1983
diff changeset
262 os.unlink(name)
662
b55a78595ef6 Pass username to hgeditor, remove temporary file
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 613
diff changeset
263
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents:
diff changeset
264 return t