Mercurial > hg
annotate hgext/hgcia.py @ 26950:6686ae524f94
tests: make 'f' tool open files in binary mode when hexdumping
On Windows, the various bundle hexdumps were being truncated at the first
occurrence of 0x1a. The line endings in the sequence generation then needs to
be standardized on LF so that the file is the same for the tool tests.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 09 Nov 2015 12:49:31 -0500 |
parents | 56b2bcea2529 |
children |
rev | line source |
---|---|
7438 | 1 # Copyright (C) 2007-8 Brendan Cully <brendan@kublai.com> |
10263 | 2 # |
3 # This software may be used and distributed according to the terms of the | |
4 # GNU General Public License version 2 or any later version. | |
7438 | 5 |
8935
f4f0e902b750
extensions: change descriptions for hook-providing extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8894
diff
changeset
|
6 """hooks for integrating with the CIA.vc notification service |
7438 | 7 |
9260
b2f37dbc5952
hgcia: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9208
diff
changeset
|
8 This is meant to be run as a changegroup or incoming hook. To |
b2f37dbc5952
hgcia: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9208
diff
changeset
|
9 configure it, set the following options in your hgrc:: |
7438 | 10 |
9208
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
11 [cia] |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
12 # your registered CIA user name |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
13 user = foo |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
14 # the name of the project in CIA |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
15 project = foo |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
16 # the module (subproject) (optional) |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
17 #module = foo |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
18 # Append a diffstat to the log message (optional) |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
19 #diffstat = False |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
20 # Template to use for log messages (optional) |
14314
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
21 #template = {desc}\\n{baseurl}{webroot}/rev/{node}-- {diffstat} |
9208
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
22 # Style to use (optional) |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
23 #style = foo |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
24 # The URL of the CIA notification service (optional) |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
16743
diff
changeset
|
25 # You can use mailto: URLs to send by email, e.g. |
9208
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
26 # mailto:cia@cia.vc |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
27 # Make sure to set email.from if you do this. |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
28 #url = http://cia.vc/ |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
29 # print message instead of sending it (optional) |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
30 #test = False |
14314
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
31 # number of slashes to strip for url paths |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
32 #strip = 0 |
7438 | 33 |
9208
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
34 [hooks] |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
35 # one of these: |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
36 changegroup.cia = python:hgcia.hook |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
37 #incoming.cia = python:hgcia.hook |
7438 | 38 |
9208
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
39 [web] |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
40 # If you want hyperlinks (optional) |
12d119ae39bc
hgcia: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
41 baseurl = http://server/path/to/repo |
7438 | 42 """ |
43 | |
44 from mercurial.i18n import _ | |
11750
26e413f55b5e
hgcia/color: remove star imports
Brodie Rao <brodie@bitheap.org>
parents:
10611
diff
changeset
|
45 from mercurial.node import bin, short |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
46 from mercurial import cmdutil, patch, util, mail, error |
7438 | 47 import email.Parser |
48 | |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
15776
diff
changeset
|
49 import socket, xmlrpclib |
7438 | 50 from xml.sax import saxutils |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24987
diff
changeset
|
51 # Note for extension authors: ONLY specify testedwith = 'internal' for |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24987
diff
changeset
|
52 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24987
diff
changeset
|
53 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24987
diff
changeset
|
54 # leave the attribute unspecified. |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16688
diff
changeset
|
55 testedwith = 'internal' |
7438 | 56 |
57 socket_timeout = 30 # seconds | |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
15776
diff
changeset
|
58 if util.safehasattr(socket, 'setdefaulttimeout'): |
7438 | 59 # set a timeout for the socket so you don't have to wait so looooong |
60 # when cia.vc is having problems. requires python >= 2.3: | |
61 socket.setdefaulttimeout(socket_timeout) | |
62 | |
63 HGCIA_VERSION = '0.1' | |
64 HGCIA_URL = 'http://hg.kublai.com/mercurial/hgcia' | |
65 | |
66 | |
67 class ciamsg(object): | |
68 """ A CIA message """ | |
69 def __init__(self, cia, ctx): | |
70 self.cia = cia | |
71 self.ctx = ctx | |
72 self.url = self.cia.url | |
14314
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
73 if self.url: |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
74 self.url += self.cia.root |
7438 | 75 |
76 def fileelem(self, path, uri, action): | |
77 if uri: | |
78 uri = ' uri=%s' % saxutils.quoteattr(uri) | |
79 return '<file%s action=%s>%s</file>' % ( | |
80 uri, saxutils.quoteattr(action), saxutils.escape(path)) | |
81 | |
82 def fileelems(self): | |
83 n = self.ctx.node() | |
13878
a8d13ee0ce68
misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents:
13551
diff
changeset
|
84 f = self.cia.repo.status(self.ctx.p1().node(), n) |
7438 | 85 url = self.url or '' |
14850
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
86 if url and url[-1] == '/': |
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
87 url = url[:-1] |
7438 | 88 elems = [] |
22917
1c38b4063586
hgcia: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
20667
diff
changeset
|
89 for path in f.modified: |
7438 | 90 uri = '%s/diff/%s/%s' % (url, short(n), path) |
91 elems.append(self.fileelem(path, url and uri, 'modify')) | |
22917
1c38b4063586
hgcia: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
20667
diff
changeset
|
92 for path in f.added: |
7438 | 93 # TODO: copy/rename ? |
94 uri = '%s/file/%s/%s' % (url, short(n), path) | |
95 elems.append(self.fileelem(path, url and uri, 'add')) | |
22917
1c38b4063586
hgcia: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
20667
diff
changeset
|
96 for path in f.removed: |
7438 | 97 elems.append(self.fileelem(path, '', 'remove')) |
98 | |
99 return '\n'.join(elems) | |
100 | |
101 def sourceelem(self, project, module=None, branch=None): | |
102 msg = ['<source>', '<project>%s</project>' % saxutils.escape(project)] | |
103 if module: | |
104 msg.append('<module>%s</module>' % saxutils.escape(module)) | |
105 if branch: | |
106 msg.append('<branch>%s</branch>' % saxutils.escape(branch)) | |
107 msg.append('</source>') | |
108 | |
109 return '\n'.join(msg) | |
110 | |
111 def diffstat(self): | |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8541
diff
changeset
|
112 class patchbuf(object): |
7438 | 113 def __init__(self): |
114 self.lines = [] | |
115 # diffstat is stupid | |
116 self.name = 'cia' | |
117 def write(self, data): | |
15776
55a85a55f020
hgcia: fix diffstat support
Matt Mackall <mpm@selenic.com>
parents:
14850
diff
changeset
|
118 self.lines += data.splitlines(True) |
7438 | 119 def close(self): |
120 pass | |
121 | |
122 n = self.ctx.node() | |
123 pbuf = patchbuf() | |
10611
e764f24a45ee
patch/diff: move patch.export() to cmdutil.export()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10529
diff
changeset
|
124 cmdutil.export(self.cia.repo, [n], fp=pbuf) |
7438 | 125 return patch.diffstat(pbuf.lines) or '' |
126 | |
127 def logmsg(self): | |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
128 if self.cia.diffstat: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
129 diffstat = self.diffstat() |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
130 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
131 diffstat = '' |
7438 | 132 self.cia.ui.pushbuffer() |
133 self.cia.templater.show(self.ctx, changes=self.ctx.changeset(), | |
14314
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
134 baseurl=self.cia.ui.config('web', 'baseurl'), |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
135 url=self.url, diffstat=diffstat, |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
136 webroot=self.cia.root) |
7438 | 137 return self.cia.ui.popbuffer() |
138 | |
139 def xml(self): | |
140 n = short(self.ctx.node()) | |
141 src = self.sourceelem(self.cia.project, module=self.cia.module, | |
142 branch=self.ctx.branch()) | |
143 # unix timestamp | |
144 dt = self.ctx.date() | |
145 timestamp = dt[0] | |
146 | |
147 author = saxutils.escape(self.ctx.user()) | |
148 rev = '%d:%s' % (self.ctx.rev(), n) | |
149 log = saxutils.escape(self.logmsg()) | |
150 | |
14850
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
151 url = self.url |
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
152 if url and url[-1] == '/': |
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
153 url = url[:-1] |
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
154 url = url and '<url>%s/rev/%s</url>' % (saxutils.escape(url), n) or '' |
7438 | 155 |
156 msg = """ | |
157 <message> | |
158 <generator> | |
159 <name>Mercurial (hgcia)</name> | |
160 <version>%s</version> | |
161 <url>%s</url> | |
162 <user>%s</user> | |
163 </generator> | |
164 %s | |
165 <body> | |
166 <commit> | |
167 <author>%s</author> | |
168 <version>%s</version> | |
169 <log>%s</log> | |
170 %s | |
171 <files>%s</files> | |
172 </commit> | |
173 </body> | |
174 <timestamp>%d</timestamp> | |
175 </message> | |
176 """ % \ | |
177 (HGCIA_VERSION, saxutils.escape(HGCIA_URL), | |
178 saxutils.escape(self.cia.user), src, author, rev, log, url, | |
179 self.fileelems(), timestamp) | |
180 | |
181 return msg | |
182 | |
183 | |
184 class hgcia(object): | |
185 """ CIA notification class """ | |
186 | |
187 deftemplate = '{desc}' | |
188 dstemplate = '{desc}\n-- \n{diffstat}' | |
189 | |
190 def __init__(self, ui, repo): | |
191 self.ui = ui | |
192 self.repo = repo | |
193 | |
194 self.ciaurl = self.ui.config('cia', 'url', 'http://cia.vc') | |
195 self.user = self.ui.config('cia', 'user') | |
196 self.project = self.ui.config('cia', 'project') | |
197 self.module = self.ui.config('cia', 'module') | |
198 self.diffstat = self.ui.configbool('cia', 'diffstat') | |
199 self.emailfrom = self.ui.config('email', 'from') | |
200 self.dryrun = self.ui.configbool('cia', 'test') | |
201 self.url = self.ui.config('web', 'baseurl') | |
14850
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
202 # Default to -1 for backward compatibility |
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
203 self.stripcount = int(self.ui.config('cia', 'strip', -1)) |
14314
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
204 self.root = self.strip(self.repo.root) |
7438 | 205 |
206 style = self.ui.config('cia', 'style') | |
207 template = self.ui.config('cia', 'template') | |
208 if not template: | |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
209 if self.diffstat: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
210 template = self.dstemplate |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
211 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22917
diff
changeset
|
212 template = self.deftemplate |
7762
fece056bf240
add --git option to commands supporting --patch (log, incoming, history, tip)
Jim Correia <jim.correia@pobox.com>
parents:
7438
diff
changeset
|
213 t = cmdutil.changeset_templater(self.ui, self.repo, False, None, |
20667
e96e9f805c19
changeset_templater: remove use_template method
Matt Mackall <mpm@selenic.com>
parents:
17424
diff
changeset
|
214 template, style, False) |
7438 | 215 self.templater = t |
216 | |
14314
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
217 def strip(self, path): |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
218 '''strip leading slashes from local path, turn into web-safe path.''' |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
219 |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
220 path = util.pconvert(path) |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
221 count = self.stripcount |
14850
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
222 if count < 0: |
a95242af945c
hgcia: Set default value of strip to -1 (issue2891)
Cédric Krier <ced@b2ck.com>
parents:
14314
diff
changeset
|
223 return '' |
14314
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
224 while count > 0: |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
225 c = path.find('/') |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
226 if c == -1: |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
227 break |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
228 path = path[c + 1:] |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
229 count -= 1 |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
230 return path |
c322890b03e6
hgcia: Handle URL like in notify (issue2406)
Cédric Krier <ced@b2ck.com>
parents:
13878
diff
changeset
|
231 |
7438 | 232 def sendrpc(self, msg): |
233 srv = xmlrpclib.Server(self.ciaurl) | |
10529
076e8a8000a3
hgcia: report RPC errors
Brendan Cully <brendan@kublai.com>
parents:
10263
diff
changeset
|
234 res = srv.hub.deliver(msg) |
13551
bbfae32f178e
hgcia: accept "queued." xmlrpc return as success
Georg Brandl <georg@python.org>
parents:
11750
diff
changeset
|
235 if res is not True and res != 'queued.': |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
236 raise error.Abort(_('%s returned an error: %s') % |
10529
076e8a8000a3
hgcia: report RPC errors
Brendan Cully <brendan@kublai.com>
parents:
10263
diff
changeset
|
237 (self.ciaurl, res)) |
7438 | 238 |
239 def sendemail(self, address, data): | |
240 p = email.Parser.Parser() | |
241 msg = p.parsestr(data) | |
242 msg['Date'] = util.datestr(format="%a, %d %b %Y %H:%M:%S %1%2") | |
243 msg['To'] = address | |
244 msg['From'] = self.emailfrom | |
245 msg['Subject'] = 'DeliverXML' | |
246 msg['Content-type'] = 'text/xml' | |
9136
31177742f54a
for calls expecting bool args, pass bool instead of int
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9062
diff
changeset
|
247 msgtext = msg.as_string() |
7438 | 248 |
249 self.ui.status(_('hgcia: sending update to %s\n') % address) | |
250 mail.sendmail(self.ui, util.email(self.emailfrom), | |
251 [address], msgtext) | |
252 | |
253 | |
254 def hook(ui, repo, hooktype, node=None, url=None, **kwargs): | |
255 """ send CIA notification """ | |
256 def sendmsg(cia, ctx): | |
257 msg = ciamsg(cia, ctx).xml() | |
258 if cia.dryrun: | |
259 ui.write(msg) | |
260 elif cia.ciaurl.startswith('mailto:'): | |
261 if not cia.emailfrom: | |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
262 raise error.Abort(_('email.from must be defined when ' |
7438 | 263 'sending by email')) |
264 cia.sendemail(cia.ciaurl[7:], msg) | |
265 else: | |
266 cia.sendrpc(msg) | |
267 | |
268 n = bin(node) | |
269 cia = hgcia(ui, repo) | |
270 if not cia.user: | |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9260
diff
changeset
|
271 ui.debug('cia: no user specified') |
7438 | 272 return |
273 if not cia.project: | |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9260
diff
changeset
|
274 ui.debug('cia: no project specified') |
7438 | 275 return |
276 if hooktype == 'changegroup': | |
277 start = repo.changelog.rev(n) | |
278 end = len(repo.changelog) | |
279 for rev in xrange(start, end): | |
280 n = repo.changelog.node(rev) | |
281 ctx = repo.changectx(n) | |
282 sendmsg(cia, ctx) | |
283 else: | |
284 ctx = repo.changectx(n) | |
285 sendmsg(cia, ctx) |