author | Martin von Zweigbergk <martinvonz@google.com> |
Tue, 23 Feb 2016 10:59:25 -0800 | |
changeset 28226 | 377f0d8ff874 |
parent 26587 | 56b2bcea2529 |
permissions | -rw-r--r-- |
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) |