##// END OF EJS Templates
Add --outgoing option to patchbomb
Brendan Cully -
r4262:f51317e2 default
parent child Browse files
Show More
@@ -86,7 +86,13 b' def patchbomb(ui, repo, *revs, **opts):'
86 86 The message contains two or three body parts. First, the rest of
87 87 the changeset description. Next, (optionally) if the diffstat
88 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 96 def prompt(prompt, default = None, rest = ': ', empty_ok = False):
91 97 if default: prompt += ' [%s]' % default
92 98 prompt += rest
@@ -165,6 +171,36 b' def patchbomb(ui, repo, *revs, **opts):'
165 171 msg['X-Mercurial-Node'] = node
166 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 204 start_time = util.makedate()
169 205
170 206 def genmsgid(id):
@@ -299,7 +335,9 b' cmdtable = {'
299 335 ('', 'plain', None, 'omit hg patch header'),
300 336 ('n', 'test', None, 'print messages that would be sent'),
301 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 340 ('s', 'subject', '', 'subject of first message (intro or single patch)'),
303 ('t', 'to', [], 'email addresses of recipients')],
304 "hg email [OPTION]... [REV]...")
341 ('t', 'to', [], 'email addresses of recipients')] + commands.remoteopts,
342 "hg email [OPTION]... [DEST]...")
305 343 }
General Comments 0
You need to be logged in to leave comments. Login now