Mercurial > hg
annotate hgext/hgcia.py @ 27295:a327a24acfea
tests: use absolute_import in generate-working-copy-states.py
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 06 Dec 2015 22:23:37 -0800 |
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) |