Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/ui.py @ 2292:903ab41ac7eb
allow to send email using sendmail.
default is still smtp.
update hgrc doc with sendmail info.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Mon, 15 May 2006 10:25:17 -0700 |
parents | 9f745d3675d4 |
children | 3dc6f2501dbc |
rev | line source |
---|---|
207 | 1 # ui.py - user interface bits for mercurial |
2 # | |
3 # Copyright 2005 Matt Mackall <mpm@selenic.com> | |
4 # | |
5 # This software may be used and distributed according to the terms | |
6 # of the GNU General Public License, incorporated herein by reference. | |
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 * |
2292
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
11 demandload(globals(), "errno getpass os re smtplib socket sys tempfile") |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
12 demandload(globals(), "templater util") |
207 | 13 |
1559
59b3639df0a9
Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents:
1483
diff
changeset
|
14 class ui(object): |
207 | 15 def __init__(self, verbose=False, debug=False, quiet=False, |
2166
d0c02b4dce9a
do not check sys.argv from localrepo when running hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2072
diff
changeset
|
16 interactive=True, traceback=False, parentui=None): |
960 | 17 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
|
18 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
|
19 # 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
|
20 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
|
21 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
|
22 self.readconfig(util.rcpath()) |
285 | 23 |
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
|
24 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
|
25 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
|
26 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
|
27 self.interactive = self.configbool("ui", "interactive", True) |
2166
d0c02b4dce9a
do not check sys.argv from localrepo when running hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2072
diff
changeset
|
28 self.traceback = traceback |
285 | 29 |
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
|
30 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
|
31 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
|
32 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
|
33 self.prev_header = [] |
2072 | 34 self.revlogopts = self.configrevlog() |
1866
89a6ce5ae510
inherit hgrc so "%" interpolation works.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1840
diff
changeset
|
35 else: |
1874
a84829140fb1
Inherit config from real parentui and don't use ConfigParser internals.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1866
diff
changeset
|
36 # 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
|
37 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
|
38 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
|
39 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
|
40 # 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
|
41 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
|
42 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
|
43 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
|
44 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
|
45 |
876e4e6ad82b
Create local ui object per repository, so .hg/hgrc don't get mixed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1637
diff
changeset
|
46 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
|
47 return getattr(self.parentui, key) |
1071 | 48 |
49 def updateopts(self, verbose=False, debug=False, quiet=False, | |
2166
d0c02b4dce9a
do not check sys.argv from localrepo when running hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2072
diff
changeset
|
50 interactive=True, traceback=False): |
285 | 51 self.quiet = (self.quiet or quiet) and not verbose and not debug |
52 self.verbose = (self.verbose or verbose) or debug | |
53 self.debugflag = (self.debugflag or debug) | |
54 self.interactive = (self.interactive and interactive) | |
2166
d0c02b4dce9a
do not check sys.argv from localrepo when running hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2072
diff
changeset
|
55 self.traceback = self.traceback or traceback |
285 | 56 |
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
|
57 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
|
58 if isinstance(fn, basestring): |
a4ba63e04134
Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents:
1473
diff
changeset
|
59 fn = [fn] |
a4ba63e04134
Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents:
1473
diff
changeset
|
60 for f in fn: |
a4ba63e04134
Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents:
1473
diff
changeset
|
61 try: |
a4ba63e04134
Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents:
1473
diff
changeset
|
62 self.cdata.read(f) |
a4ba63e04134
Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents:
1473
diff
changeset
|
63 except ConfigParser.ParsingError, inst: |
a4ba63e04134
Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents:
1473
diff
changeset
|
64 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
|
65 # 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 self.cdata.set("paths", name, os.path.join(root, path)) |
337 | 71 |
960 | 72 def setconfig(self, section, name, val): |
73 self.overlay[(section, name)] = val | |
74 | |
75 def config(self, section, name, default=None): | |
76 if self.overlay.has_key((section, name)): | |
77 return self.overlay[(section, name)] | |
78 if self.cdata.has_option(section, name): | |
1876
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
79 try: |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
80 return self.cdata.get(section, name) |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
81 except ConfigParser.InterpolationError, inst: |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
82 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
|
83 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
|
84 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
|
85 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
|
86 return self.parentui.config(section, name, default) |
285 | 87 |
960 | 88 def configbool(self, section, name, default=False): |
89 if self.overlay.has_key((section, name)): | |
90 return self.overlay[(section, name)] | |
91 if self.cdata.has_option(section, name): | |
1876
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
92 try: |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
93 return self.cdata.getboolean(section, name) |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
94 except ConfigParser.InterpolationError, inst: |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
95 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
|
96 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
|
97 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
|
98 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
|
99 return self.parentui.configbool(section, name, default) |
285 | 100 |
101 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
|
102 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
|
103 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
|
104 items = dict(self.parentui.configitems(section)) |
285 | 105 if self.cdata.has_section(section): |
1876
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
106 try: |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
107 items.update(dict(self.cdata.items(section))) |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
108 except ConfigParser.InterpolationError, inst: |
2e0fd78587bd
Catch hgrc interpolation errors nicely.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1874
diff
changeset
|
109 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
|
110 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
|
111 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
|
112 return x |
285 | 113 |
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
|
114 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
|
115 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
|
116 seen = {} |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
117 for (section, name), value in self.overlay.iteritems(): |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
118 yield section, name, value |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
119 seen[section, name] = 1 |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
120 for section in self.cdata.sections(): |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
121 for name, value in self.cdata.items(section): |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
122 if (section, name) in seen: continue |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
123 yield section, name, value.replace('\n', '\\n') |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 yield parent |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
981
diff
changeset
|
128 |
1071 | 129 def extensions(self): |
130 return self.configitems("extensions") | |
131 | |
2003 | 132 def hgignorefiles(self): |
133 result = [] | |
134 cfgitems = self.configitems("ui") | |
135 for key, value in cfgitems: | |
136 if key == 'ignore' or key.startswith('ignore.'): | |
137 path = os.path.expanduser(value) | |
138 result.append(path) | |
139 return result | |
140 | |
2072 | 141 def configrevlog(self): |
142 ret = {} | |
143 for x in self.configitems("revlog"): | |
144 k = x[0].lower() | |
145 ret[k] = x[1] | |
146 return ret | |
1637 | 147 def diffopts(self): |
148 if self.diffcache: | |
149 return self.diffcache | |
150 ret = { 'showfunc' : True, 'ignorews' : False} | |
151 for x in self.configitems("diff"): | |
152 k = x[0].lower() | |
153 v = x[1] | |
154 if v: | |
155 v = v.lower() | |
156 if v == 'true': | |
157 value = True | |
158 else: | |
159 value = False | |
160 ret[k] = value | |
161 self.diffcache = ret | |
162 return ret | |
163 | |
608
d2994b5298fb
Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents:
565
diff
changeset
|
164 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
|
165 """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
|
166 |
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
167 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
|
168 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
|
169 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
|
170 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
|
171 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
|
172 """ |
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
173 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
|
174 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
|
175 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
|
176 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
|
177 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
|
178 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
|
179 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
|
180 if user: |
c577689006fa
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1984
diff
changeset
|
181 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
|
182 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
|
183 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
|
184 return user |
608
d2994b5298fb
Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents:
565
diff
changeset
|
185 |
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 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
|
187 """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
|
188 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
|
189 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
|
190 |
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
|
191 def expandpath(self, loc): |
1892
622ee75cb4c9
Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1882
diff
changeset
|
192 """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
|
193 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
|
194 return loc |
622ee75cb4c9
Directory names take precedence over symbolic names consistently.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1882
diff
changeset
|
195 |
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
|
196 return self.config("paths", loc, loc) |
506 | 197 |
207 | 198 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
|
199 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
|
200 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
|
201 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
|
202 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
|
203 self.header = [] |
207 | 204 for a in args: |
205 sys.stdout.write(str(a)) | |
565 | 206 |
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
|
207 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
|
208 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
|
209 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
|
210 |
565 | 211 def write_err(self, *args): |
1989
0541768fa558
ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1985
diff
changeset
|
212 try: |
0541768fa558
ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1985
diff
changeset
|
213 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
|
214 for a in args: |
0541768fa558
ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1985
diff
changeset
|
215 sys.stderr.write(str(a)) |
0541768fa558
ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1985
diff
changeset
|
216 except IOError, inst: |
0541768fa558
ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1985
diff
changeset
|
217 if inst.errno != errno.EPIPE: |
0541768fa558
ignore EPIPE in ui.err_write
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1985
diff
changeset
|
218 raise |
565 | 219 |
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
|
220 def flush(self): |
2013
65634e1038dd
Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents:
2003
diff
changeset
|
221 try: sys.stdout.flush() |
65634e1038dd
Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents:
2003
diff
changeset
|
222 except: pass |
65634e1038dd
Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents:
2003
diff
changeset
|
223 try: sys.stderr.flush() |
65634e1038dd
Fix error on Windows if "hg log | more" exits.
Eung-Ju Park <eungju@gmail.com>
parents:
2003
diff
changeset
|
224 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
|
225 |
207 | 226 def readline(self): |
227 return sys.stdin.readline()[:-1] | |
2281
7761597b5da3
prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2206
diff
changeset
|
228 def prompt(self, msg, pat=None, default="y"): |
207 | 229 if not self.interactive: return default |
230 while 1: | |
231 self.write(msg, " ") | |
232 r = self.readline() | |
2281
7761597b5da3
prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2206
diff
changeset
|
233 if not pat or re.match(pat, r): |
207 | 234 return r |
235 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
|
236 self.write(_("unrecognized response\n")) |
2281
7761597b5da3
prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2206
diff
changeset
|
237 def getpass(self, prompt=None, default=None): |
7761597b5da3
prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2206
diff
changeset
|
238 if not self.interactive: return default |
7761597b5da3
prompt user for http authentication info
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2206
diff
changeset
|
239 return getpass.getpass(prompt or _('password: ')) |
207 | 240 def status(self, *msg): |
241 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
|
242 def warn(self, *msg): |
565 | 243 self.write_err(*msg) |
207 | 244 def note(self, *msg): |
245 if self.verbose: self.write(*msg) | |
246 def debug(self, *msg): | |
247 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
|
248 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
|
249 (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
|
250 text=True) |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
251 try: |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
252 f = os.fdopen(fd, "w") |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
253 f.write(text) |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
254 f.close() |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
255 |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
256 editor = (os.environ.get("HGEDITOR") or |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
257 self.config("ui", "editor") or |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
258 os.environ.get("EDITOR", "vi")) |
207 | 259 |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
260 util.system("%s \"%s\"" % (editor, name), |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
261 environ={'HGUSER': user}, |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
262 onerr=util.Abort, errprefix=_("edit failed")) |
608
d2994b5298fb
Add username/merge/editor to .hgrc
Matt Mackall <mpm@selenic.com>
parents:
565
diff
changeset
|
263 |
1984
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
264 f = open(name) |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
265 t = f.read() |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
266 f.close() |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
267 t = re.sub("(?m)^HG:.*\n", "", t) |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
268 finally: |
df7436f439a0
Improved ui.edit():
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1983
diff
changeset
|
269 os.unlink(name) |
662
b55a78595ef6
Pass username to hgeditor, remove temporary file
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
613
diff
changeset
|
270 |
207 | 271 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
|
272 |
9f43b6e24232
move mail sending code into core, so extensions can share it.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2166
diff
changeset
|
273 def sendmail(self): |
2292
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
274 '''send mail message. object returned has one method, sendmail. |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
275 call as sendmail(sender, list-of-recipients, msg).''' |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
276 |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
277 def smtp(): |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
278 '''send mail using smtp.''' |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
279 |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
280 s = smtplib.SMTP() |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
281 mailhost = self.config('smtp', 'host') |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
282 if not mailhost: |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
283 raise util.Abort(_('no [smtp]host in hgrc - cannot send mail')) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
284 mailport = int(self.config('smtp', 'port', 25)) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
285 self.note(_('sending mail: smtp host %s, port %s\n') % |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
286 (mailhost, mailport)) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
287 s.connect(host=mailhost, port=mailport) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
288 if self.configbool('smtp', 'tls'): |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
289 self.note(_('(using tls)\n')) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
290 s.ehlo() |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
291 s.starttls() |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
292 s.ehlo() |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
293 username = self.config('smtp', 'username') |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
294 password = self.config('smtp', 'password') |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
295 if username and password: |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
296 self.note(_('(authenticating to mail server as %s)\n') % |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
297 (username)) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
298 s.login(username, password) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
299 return s |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
300 |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
301 class sendmail(object): |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
302 '''send mail using sendmail.''' |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
303 |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
304 def __init__(self, ui, program): |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
305 self.ui = ui |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
306 self.program = program |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
307 |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
308 def sendmail(self, sender, recipients, msg): |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
309 cmdline = '%s -f %s %s' % ( |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
310 self.program, templater.email(sender), |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
311 ' '.join(map(templater.email, recipients))) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
312 self.ui.note(_('sending mail: %s\n') % cmdline) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
313 fp = os.popen(cmdline, 'w') |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
314 fp.write(msg) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
315 ret = fp.close() |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
316 if ret: |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
317 raise util.Abort('%s %s' % ( |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
318 os.path.basename(self.program.split(None, 1)[0]), |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
319 util.explain_exit(ret)[0])) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
320 |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
321 method = self.config('email', 'method', 'smtp') |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
322 if method == 'smtp': |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
323 mail = smtp() |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
324 else: |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
325 mail = sendmail(self, method) |
903ab41ac7eb
allow to send email using sendmail.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2286
diff
changeset
|
326 return mail |