Submitter | David Demelier |
---|---|
Date | Feb. 3, 2017, 2:04 p.m. |
Message ID | <a9061ca9a25c8e16150f.1486130661@localhost.localdomain> |
Download | mbox | patch |
Permalink | /patch/18320/ |
State | Changes Requested |
Headers | show |
Comments
David Demelier <demelier.david@gmail.com> writes: > # HG changeset patch > # User David Demelier <demelier.david@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.
Patch
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')), + ('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) revs = scmutil.revrange(repo, revs) if outgoing: