Mercurial > hg
comparison hgext/patchbomb.py @ 4262:f51317e24114
Add --outgoing option to patchbomb
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Thu, 22 Mar 2007 10:40:28 -0700 |
parents | 03e9c22a6489 |
children | cfe886c14ddf |
comparison
equal
deleted
inserted
replaced
4256:fe0fe0b4d73b | 4262:f51317e24114 |
---|---|
84 Each patch email has a Subject line of "[PATCH M of N] ...", using | 84 Each patch email has a Subject line of "[PATCH M of N] ...", using |
85 the first line of the changeset description as the subject text. | 85 the first line of the changeset description as the subject text. |
86 The message contains two or three body parts. First, the rest of | 86 The message contains two or three body parts. First, the rest of |
87 the changeset description. Next, (optionally) if the diffstat | 87 the changeset description. Next, (optionally) if the diffstat |
88 program is installed, the result of running diffstat on the patch. | 88 program is installed, the result of running diffstat on the patch. |
89 Finally, the patch itself, as generated by "hg export".''' | 89 Finally, the patch itself, as generated by "hg export". |
90 | |
91 With --outgoing, emails will be generated for patches not | |
92 found in the target repository (or only those which are | |
93 ancestors of the specified revisions if any are provided) | |
94 ''' | |
95 | |
90 def prompt(prompt, default = None, rest = ': ', empty_ok = False): | 96 def prompt(prompt, default = None, rest = ': ', empty_ok = False): |
91 if default: prompt += ' [%s]' % default | 97 if default: prompt += ' [%s]' % default |
92 prompt += rest | 98 prompt += rest |
93 while True: | 99 while True: |
94 r = raw_input(prompt) | 100 r = raw_input(prompt) |
163 subj = '[PATCH %0*d of %d] %s' % (tlen, idx, total, subj) | 169 subj = '[PATCH %0*d of %d] %s' % (tlen, idx, total, subj) |
164 msg['Subject'] = subj | 170 msg['Subject'] = subj |
165 msg['X-Mercurial-Node'] = node | 171 msg['X-Mercurial-Node'] = node |
166 return msg | 172 return msg |
167 | 173 |
174 def outgoing(dest, revs): | |
175 '''Return the revisions present locally but not in dest''' | |
176 dest = ui.expandpath(dest or 'default-push', dest or 'default') | |
177 revs = [repo.lookup(rev) for rev in revs] | |
178 other = hg.repository(ui, dest) | |
179 ui.status(_('comparing with %s\n') % dest) | |
180 o = repo.findoutgoing(other) | |
181 if not o: | |
182 ui.status(_("no changes found\n")) | |
183 return [] | |
184 o = repo.changelog.nodesbetween(o, revs or None)[0] | |
185 return [str(repo.changelog.rev(r)) for r in o] | |
186 | |
187 # option handling | |
188 commands.setremoteconfig(ui, opts) | |
189 if opts.get('outgoing'): | |
190 if len(revs) > 1: | |
191 raise util.Abort(_("too many destinations")) | |
192 dest = revs and revs[0] or None | |
193 revs = [] | |
194 | |
195 if opts.get('rev'): | |
196 if revs: | |
197 raise util.Abort(_('use only one form to specify the revision')) | |
198 revs = opts.get('rev') | |
199 | |
200 if opts.get('outgoing'): | |
201 revs = outgoing(dest, opts.get('rev')) | |
202 | |
203 # start | |
168 start_time = util.makedate() | 204 start_time = util.makedate() |
169 | 205 |
170 def genmsgid(id): | 206 def genmsgid(id): |
171 return '<%s.%s@%s>' % (id[:20], int(start_time[0]), socket.getfqdn()) | 207 return '<%s.%s@%s>' % (id[:20], int(start_time[0]), socket.getfqdn()) |
172 | 208 |
297 ('g', 'git', None, _('use git extended diff format')), | 333 ('g', 'git', None, _('use git extended diff format')), |
298 ('f', 'from', '', 'email address of sender'), | 334 ('f', 'from', '', 'email address of sender'), |
299 ('', 'plain', None, 'omit hg patch header'), | 335 ('', 'plain', None, 'omit hg patch header'), |
300 ('n', 'test', None, 'print messages that would be sent'), | 336 ('n', 'test', None, 'print messages that would be sent'), |
301 ('m', 'mbox', '', 'write messages to mbox file instead of sending them'), | 337 ('m', 'mbox', '', 'write messages to mbox file instead of sending them'), |
338 ('o', 'outgoing', None, _('send changes not found in the target repository')), | |
339 ('r', 'rev', [], _('a revision to send')), | |
302 ('s', 'subject', '', 'subject of first message (intro or single patch)'), | 340 ('s', 'subject', '', 'subject of first message (intro or single patch)'), |
303 ('t', 'to', [], 'email addresses of recipients')], | 341 ('t', 'to', [], 'email addresses of recipients')] + commands.remoteopts, |
304 "hg email [OPTION]... [REV]...") | 342 "hg email [OPTION]... [DEST]...") |
305 } | 343 } |