[PATCH] patchbomb: add -B option to select a bookmark
Sean Farley
sean at farley.io
Fri Feb 3 18:22:39 EST 2017
David Demelier <demelier.david at gmail.com> writes:
> # HG changeset patch
> # User David Demelier <demelier.david at gmail.com>
> # Date 1486130547 -3600
> # Fri Feb 03 15:02:27 2017 +0100
> # Node ID a9061ca9a25c8e16150fd2e1574ccac1310b7a03
> # Parent abf029200e198878a4576a87e095bd8d77d9cea9
> patchbomb: add -B option to select a bookmark
>
> Add the -B/--bookmark option to select a bookmark whose changesets
> and its ancestors will be selected unless a new bookmark/head is
> found.
>
> This is inspired by hg strip -B option.
Totally fine idea, I like it.
> diff -r abf029200e19 -r a9061ca9a25c hgext/patchbomb.py
> --- a/hgext/patchbomb.py Wed Feb 01 11:30:26 2017 -0600
> +++ b/hgext/patchbomb.py Fri Feb 03 15:02:27 2017 +0100
> @@ -81,6 +81,7 @@
> mail,
> node as nodemod,
> patch,
> + repair,
> scmutil,
> util,
> )
> @@ -411,6 +412,7 @@
> ('o', 'outgoing', None,
> _('send changes not found in the target repository')),
> ('b', 'bundle', None, _('send changes not in target as a binary bundle')),
Unrelated: -b option not meaning 'branch' makes me so very sad.
> + ('B', 'bookmark', '', _('send changes only reachable by given bookmark')),
> ('', 'bundlename', 'bundle',
> _('name of the bundle attachment file'), _('NAME')),
> ('r', 'rev', [], _('a revision to send'), _('REV')),
> @@ -449,6 +451,9 @@
> body and as a regular or an inline attachment by combining the
> -a/--attach or -i/--inline with the --body option.
>
> + With -B/--bookmark changesets reachable by the given bookmark are
> + selected.
> +
> With -o/--outgoing, emails will be generated for patches not found
> in the destination repository (or only those which are ancestors
> of the specified revisions if any are provided)
> @@ -489,6 +494,8 @@
> hg email -o -r 3000 # send all ancestors of 3000 not in default
> hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST
>
> + hg email -B feature # send all ancestors of feature bookmark
> +
> hg email -b # send bundle of all patches not in default
> hg email -b DEST # send bundle of all patches not in DEST
> hg email -b -r 3000 # bundle of all ancestors of 3000 not in default
> @@ -511,6 +518,7 @@
> mbox = opts.get('mbox')
> outgoing = opts.get('outgoing')
> rev = opts.get('rev')
> + bookmark = opts.get('bookmark')
> # internal option used by pbranches
> patches = opts.get('patches')
>
> @@ -518,8 +526,8 @@
> # really sending
> mail.validateconfig(ui)
>
> - if not (revs or rev or outgoing or bundle or patches):
> - raise error.Abort(_('specify at least one changeset with -r or -o'))
> + if not (revs or rev or outgoing or bundle or patches or bookmark):
> + raise error.Abort(_('specify at least one changeset with -B, -r or -o'))
>
> if outgoing and bundle:
> raise error.Abort(_("--outgoing mode always on with --bundle;"
> @@ -538,6 +546,10 @@
> if revs:
> raise error.Abort(_('use only one form to specify the revision'))
> revs = rev
> + elif bookmark:
> + if not bookmark in repo._bookmarks:
> + raise error.Abort(_("bookmark '%s' not found") % bookmark)
> + revs = repair.stripbmrevset(repo, bookmark)
My only suggestion here is to add a test. I'm working on cleaning up the
bookmark module so I'm thinking I can refactor this revset then.
More information about the Mercurial-devel
mailing list