comparison hgext/patchbomb.py @ 1827:26dd4ae77b7b

get patchbomb extension to use demandload. speeds up hg startup by 50%.
author Vadim Gelfer <vadim.gelger@gmail.com>
date Thu, 02 Mar 2006 11:38:39 -0800
parents e291d9a30bef
children cfe689ab3f06
comparison
equal deleted inserted replaced
1826:f3abe0bdccdd 1827:26dd4ae77b7b
47 # [patchbomb] 47 # [patchbomb]
48 # from = My Name <my@email> 48 # from = My Name <my@email>
49 # to = recipient1, recipient2, ... 49 # to = recipient1, recipient2, ...
50 # cc = cc1, cc2, ... 50 # cc = cc1, cc2, ...
51 51
52 from email.MIMEMultipart import MIMEMultipart 52 from mercurial.demandload import *
53 from email.MIMEText import MIMEText 53 demandload(globals(), '''email.MIMEMultipart email.MIMEText email.Utils
54 from email.Utils import parseaddr 54 mercurial:commands,hg,ui
55 from mercurial import commands 55 os popen2 smtplib socket sys tempfile time''')
56 from mercurial import hg
57 from mercurial import ui
58 from mercurial.i18n import gettext as _ 56 from mercurial.i18n import gettext as _
59 import os
60 import popen2
61 import smtplib
62 import socket
63 import sys
64 import tempfile
65 import time
66 57
67 try: 58 try:
68 # readline gives raw_input editing capabilities, but is not 59 # readline gives raw_input editing capabilities, but is not
69 # present on windows 60 # present on windows
70 import readline 61 import readline
147 if patch: patch.pop(0) 138 if patch: patch.pop(0)
148 while patch and not patch[0].strip(): patch.pop(0) 139 while patch and not patch[0].strip(): patch.pop(0)
149 if opts['diffstat']: 140 if opts['diffstat']:
150 body += cdiffstat('\n'.join(desc), patch) + '\n\n' 141 body += cdiffstat('\n'.join(desc), patch) + '\n\n'
151 body += '\n'.join(patch) 142 body += '\n'.join(patch)
152 msg = MIMEText(body) 143 msg = email.MIMEText.MIMEText(body)
153 subj = '[PATCH %d of %d] %s' % (idx, total, desc[0].strip()) 144 subj = '[PATCH %d of %d] %s' % (idx, total, desc[0].strip())
154 if subj.endswith('.'): subj = subj[:-1] 145 if subj.endswith('.'): subj = subj[:-1]
155 msg['Subject'] = subj 146 msg['Subject'] = subj
156 msg['X-Mercurial-Node'] = node 147 msg['X-Mercurial-Node'] = node
157 return msg 148 return msg
192 ui.write(_('\nWrite the introductory message for the patch series.\n\n')) 183 ui.write(_('\nWrite the introductory message for the patch series.\n\n'))
193 184
194 sender = (opts['from'] or ui.config('patchbomb', 'from') or 185 sender = (opts['from'] or ui.config('patchbomb', 'from') or
195 prompt('From', ui.username())) 186 prompt('From', ui.username()))
196 187
197 msg = MIMEMultipart() 188 msg = email.MIMEMultipart.MIMEMultipart()
198 msg['Subject'] = '[PATCH 0 of %d] %s' % ( 189 msg['Subject'] = '[PATCH 0 of %d] %s' % (
199 len(patches), 190 len(patches),
200 opts['subject'] or 191 opts['subject'] or
201 prompt('Subject:', rest = ' [PATCH 0 of %d] ' % len(patches))) 192 prompt('Subject:', rest = ' [PATCH 0 of %d] ' % len(patches)))
202 193
215 try: l = raw_input() 206 try: l = raw_input()
216 except EOFError: break 207 except EOFError: break
217 if l == '.': break 208 if l == '.': break
218 body.append(l) 209 body.append(l)
219 210
220 msg.attach(MIMEText('\n'.join(body) + '\n')) 211 msg.attach(email.MIMEText.MIMEText('\n'.join(body) + '\n'))
221 212
222 ui.write('\n') 213 ui.write('\n')
223 214
224 if opts['diffstat']: 215 if opts['diffstat']:
225 d = cdiffstat(_('Final summary:\n'), jumbo) 216 d = cdiffstat(_('Final summary:\n'), jumbo)
226 if d: msg.attach(MIMEText(d)) 217 if d: msg.attach(email.MIMEText.MIMEText(d))
227 218
228 msgs.insert(0, msg) 219 msgs.insert(0, msg)
229 220
230 if not opts['test'] and not opts['mbox']: 221 if not opts['test'] and not opts['mbox']:
231 s = smtplib.SMTP() 222 s = smtplib.SMTP()
239 password = ui.config('smtp', 'password') 230 password = ui.config('smtp', 'password')
240 if username and password: 231 if username and password:
241 s.login(username, password) 232 s.login(username, password)
242 parent = None 233 parent = None
243 tz = time.strftime('%z') 234 tz = time.strftime('%z')
244 sender_addr = parseaddr(sender)[1] 235 sender_addr = email.Utils.parseaddr(sender)[1]
245 for m in msgs: 236 for m in msgs:
246 try: 237 try:
247 m['Message-Id'] = genmsgid(m['X-Mercurial-Node']) 238 m['Message-Id'] = genmsgid(m['X-Mercurial-Node'])
248 except TypeError: 239 except TypeError:
249 m['Message-Id'] = genmsgid('patchbomb') 240 m['Message-Id'] = genmsgid('patchbomb')