Show More
@@ -74,15 +74,14 b' def diffstat(patch):' | |||
|
74 | 74 | |
|
75 | 75 | def patchbomb(ui, repo, *revs, **opts): |
|
76 | 76 | def prompt(prompt, default = None, rest = ': ', empty_ok = False): |
|
77 | try: | |
|
78 | if default: prompt += ' [%s]' % default | |
|
79 | prompt += rest | |
|
77 | if default: prompt += ' [%s]' % default | |
|
78 | prompt += rest | |
|
79 | while True: | |
|
80 | 80 | r = raw_input(prompt) |
|
81 | if not r and not empty_ok: raise EOFError | |
|
82 | return r | |
|
83 | except EOFError: | |
|
84 | if default is None: raise | |
|
85 | return default | |
|
81 | if r: return r | |
|
82 | if default is not None: return default | |
|
83 | if empty_ok: return r | |
|
84 | print >> sys.stderr, 'Please enter a valid value.' | |
|
86 | 85 | |
|
87 | 86 | def confirm(s): |
|
88 | 87 | if not prompt(s, default = 'y', rest = '? ').lower().startswith('y'): |
@@ -97,7 +96,7 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
97 | 96 | confirm('Does the diffstat above look okay') |
|
98 | 97 | return s |
|
99 | 98 | |
|
100 |
def make |
|
|
99 | def makepatch(patch, idx, total): | |
|
101 | 100 | desc = [] |
|
102 | 101 | node = None |
|
103 | 102 | for line in patch: |
@@ -107,30 +106,20 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
107 | 106 | if line.startswith('diff -r'): break |
|
108 | 107 | desc.append(line) |
|
109 | 108 | if not node: raise ValueError |
|
110 | msg = MIMEMultipart() | |
|
111 | msg['X-Mercurial-Node'] = node | |
|
109 | body = ('\n'.join(desc[1:]).strip() or | |
|
110 | 'Patch subject is complete summary.') | |
|
111 | body += '\n\n\n' + cdiffstat('\n'.join(desc), patch) + '\n\n' | |
|
112 | body += '\n'.join(patch) | |
|
113 | msg = MIMEText(body) | |
|
112 | 114 | subj = '[PATCH %d of %d] %s' % (idx, total, desc[0].strip()) |
|
113 | 115 | if subj.endswith('.'): subj = subj[:-1] |
|
114 | 116 | msg['Subject'] = subj |
|
115 | body = '\n'.join(desc[1:]).strip() + '\n' | |
|
116 | summary = subj | |
|
117 | if body != '\n': | |
|
118 | msg.attach(MIMEText(body)) | |
|
119 | summary += '\n\n' + body | |
|
120 | else: | |
|
121 | summary += '\n' | |
|
122 | d = cdiffstat(summary, patch) | |
|
123 | if d: msg.attach(MIMEText(d)) | |
|
124 | p = MIMEText('\n'.join(patch), 'x-patch') | |
|
125 | p['Content-Disposition'] = commands.make_filename(repo, None, | |
|
126 | 'inline; filename=%b-%n.patch', | |
|
127 | seqno = idx) | |
|
128 | msg.attach(p) | |
|
117 | msg['X-Mercurial-Node'] = node | |
|
129 | 118 | return msg |
|
130 | 119 | |
|
131 | 120 | start_time = int(time.time()) |
|
132 | 121 | |
|
133 |
def |
|
|
122 | def genmsgid(id): | |
|
134 | 123 | return '<%s.%s@%s>' % (id[:20], start_time, socket.getfqdn()) |
|
135 | 124 | |
|
136 | 125 | patches = [] |
@@ -139,6 +128,7 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
139 | 128 | def __init__(self, container): |
|
140 | 129 | self.lines = [] |
|
141 | 130 | self.container = container |
|
131 | self.name = 'email' | |
|
142 | 132 | |
|
143 | 133 | def write(self, data): |
|
144 | 134 | self.lines.append(data) |
@@ -156,7 +146,7 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
156 | 146 | |
|
157 | 147 | for p, i in zip(patches, range(len(patches))): |
|
158 | 148 | jumbo.extend(p) |
|
159 |
msgs.append(make |
|
|
149 | msgs.append(makepatch(p, i + 1, len(patches))) | |
|
160 | 150 | |
|
161 | 151 | ui.write('\nWrite the introductory message for the patch series.\n\n') |
|
162 | 152 | |
@@ -188,24 +178,22 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
188 | 178 | |
|
189 | 179 | msgs.insert(0, msg) |
|
190 | 180 | |
|
191 | s = smtplib.SMTP() | |
|
192 | s.connect(host = ui.config('smtp', 'host', 'mail'), | |
|
193 |
|
|
|
181 | if not opts['test']: | |
|
182 | s = smtplib.SMTP() | |
|
183 | s.connect(host = ui.config('smtp', 'host', 'mail'), | |
|
184 | port = int(ui.config('smtp', 'port', 25))) | |
|
194 | 185 | |
|
195 | refs = [] | |
|
196 | 186 | parent = None |
|
197 | 187 | tz = time.strftime('%z') |
|
198 | 188 | for m in msgs: |
|
199 | 189 | try: |
|
200 |
m['Message-Id'] = |
|
|
190 | m['Message-Id'] = genmsgid(m['X-Mercurial-Node']) | |
|
201 | 191 | except TypeError: |
|
202 |
m['Message-Id'] = |
|
|
192 | m['Message-Id'] = genmsgid('patchbomb') | |
|
203 | 193 | if parent: |
|
204 | 194 | m['In-Reply-To'] = parent |
|
205 | parent = m['Message-Id'] | |
|
206 | if len(refs) > 1: | |
|
207 | m['References'] = ' '.join(refs[:-1]) | |
|
208 | refs.append(parent) | |
|
195 | else: | |
|
196 | parent = m['Message-Id'] | |
|
209 | 197 | m['Date'] = time.strftime('%a, %m %b %Y %T ', time.localtime(start_time)) + tz |
|
210 | 198 | start_time += 1 |
|
211 | 199 | m['From'] = sender |
@@ -219,7 +207,8 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
219 | 207 | fp.close() |
|
220 | 208 | else: |
|
221 | 209 | s.sendmail(sender, to + cc, m.as_string(0)) |
|
222 | s.close() | |
|
210 | if not opts['test']: | |
|
211 | s.close() | |
|
223 | 212 | |
|
224 | 213 | if __name__ == '__main__': |
|
225 | 214 | optspec = [('c', 'cc', [], 'email addresses of copy recipients'), |
General Comments 0
You need to be logged in to leave comments.
Login now