Mercurial > hg
changeset 4262:f51317e24114
Add --outgoing option to patchbomb
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Thu, 22 Mar 2007 10:40:28 -0700 |
parents | fe0fe0b4d73b |
children | 47ba52121433 |
files | hgext/patchbomb.py |
diffstat | 1 files changed, 41 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/patchbomb.py Tue Mar 20 22:21:05 2007 -0300 +++ b/hgext/patchbomb.py Thu Mar 22 10:40:28 2007 -0700 @@ -86,7 +86,13 @@ The message contains two or three body parts. First, the rest of the changeset description. Next, (optionally) if the diffstat program is installed, the result of running diffstat on the patch. - Finally, the patch itself, as generated by "hg export".''' + Finally, the patch itself, as generated by "hg export". + + With --outgoing, emails will be generated for patches not + found in the target repository (or only those which are + ancestors of the specified revisions if any are provided) + ''' + def prompt(prompt, default = None, rest = ': ', empty_ok = False): if default: prompt += ' [%s]' % default prompt += rest @@ -165,6 +171,36 @@ msg['X-Mercurial-Node'] = node return msg + def outgoing(dest, revs): + '''Return the revisions present locally but not in dest''' + dest = ui.expandpath(dest or 'default-push', dest or 'default') + revs = [repo.lookup(rev) for rev in revs] + other = hg.repository(ui, dest) + ui.status(_('comparing with %s\n') % dest) + o = repo.findoutgoing(other) + if not o: + ui.status(_("no changes found\n")) + return [] + o = repo.changelog.nodesbetween(o, revs or None)[0] + return [str(repo.changelog.rev(r)) for r in o] + + # option handling + commands.setremoteconfig(ui, opts) + if opts.get('outgoing'): + if len(revs) > 1: + raise util.Abort(_("too many destinations")) + dest = revs and revs[0] or None + revs = [] + + if opts.get('rev'): + if revs: + raise util.Abort(_('use only one form to specify the revision')) + revs = opts.get('rev') + + if opts.get('outgoing'): + revs = outgoing(dest, opts.get('rev')) + + # start start_time = util.makedate() def genmsgid(id): @@ -299,7 +335,9 @@ ('', 'plain', None, 'omit hg patch header'), ('n', 'test', None, 'print messages that would be sent'), ('m', 'mbox', '', 'write messages to mbox file instead of sending them'), + ('o', 'outgoing', None, _('send changes not found in the target repository')), + ('r', 'rev', [], _('a revision to send')), ('s', 'subject', '', 'subject of first message (intro or single patch)'), - ('t', 'to', [], 'email addresses of recipients')], - "hg email [OPTION]... [REV]...") + ('t', 'to', [], 'email addresses of recipients')] + commands.remoteopts, + "hg email [OPTION]... [DEST]...") }