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.
--- a/hgext/patchbomb.py Sat May 27 22:27:56 2017 +0200
+++ b/hgext/patchbomb.py Fri Feb 03 15:02:27 2017 +0100
@@ -90,6 +90,7 @@
node as nodemod,
patch,
registrar,
+ repair,
scmutil,
templater,
util,
@@ -442,6 +443,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')),
@@ -480,6 +482,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)
@@ -518,6 +523,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
@@ -540,13 +547,14 @@
mbox = opts.get('mbox')
outgoing = opts.get('outgoing')
rev = opts.get('rev')
+ bookmark = opts.get('bookmark')
if not (opts.get('test') or mbox):
# really sending
mail.validateconfig(ui)
- if not (revs or rev or outgoing or bundle):
- raise error.Abort(_('specify at least one changeset with -r or -o'))
+ if not (revs or rev or outgoing or bundle 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;"
@@ -565,6 +573,10 @@
if revs:
raise error.Abort(_('use only one form to specify the revision'))
revs = rev
+ elif bookmark:
+ if bookmark not in repo._bookmarks:
+ raise error.Abort(_("bookmark '%s' not found") % bookmark)
+ revs = repair.stripbmrevset(repo, bookmark)
revs = scmutil.revrange(repo, revs)
if outgoing:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-patchbomb-bookmark.t Fri Feb 03 15:02:27 2017 +0100
@@ -0,0 +1,168 @@
+Create @ bookmark as main reference
+
+ $ hg init repo
+ $ cd repo
+ $ echo "[extensions]" >> $HGRCPATH
+ $ echo "patchbomb=" >> $HGRCPATH
+ $ hg book @
+
+Create a dummy revision that must never be exported
+
+ $ echo no > no
+ $ hg ci -Amno -d '6 0'
+ adding no
+
+Create a feature and use -B
+
+ $ hg book booktest
+ $ echo first > a
+ $ hg ci -Amfirst -d '7 0'
+ adding a
+ $ echo second > b
+ $ hg ci -Amsecond -d '8 0'
+ adding b
+ $ hg email --date '1981-1-1 0:1' -n -t foo -s bookmark -B booktest
+ From [test]: test
+ this patch series consists of 2 patches.
+
+
+ Write the introductory message for the patch series.
+
+ Cc:
+
+ displaying [PATCH 0 of 2] bookmark ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH 0 of 2] bookmark
+ Message-Id: <patchbomb.347155260@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1981 00:01:00 +0000
+ From: test
+ To: foo
+
+
+ displaying [PATCH 1 of 2] first ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH 1 of 2] first
+ X-Mercurial-Node: accde9b8b6dce861c185d0825c1affc09a79cb26
+ X-Mercurial-Series-Index: 1
+ X-Mercurial-Series-Total: 2
+ Message-Id: <accde9b8b6dce861c185.347155261@*> (glob)
+ X-Mercurial-Series-Id: <accde9b8b6dce861c185.347155261@*> (glob)
+ In-Reply-To: <patchbomb.347155260@*> (glob)
+ References: <patchbomb.347155260@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1981 00:01:01 +0000
+ From: test
+ To: foo
+
+ # HG changeset patch
+ # User test
+ # Date 7 0
+ # Thu Jan 01 00:00:07 1970 +0000
+ # Node ID accde9b8b6dce861c185d0825c1affc09a79cb26
+ # Parent 043bd3889e5aaf7d88fe3713cf425f782ad2fb71
+ first
+
+ diff -r 043bd3889e5a -r accde9b8b6dc a
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/a Thu Jan 01 00:00:07 1970 +0000
+ @@ -0,0 +1,1 @@
+ +first
+
+ displaying [PATCH 2 of 2] second ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH 2 of 2] second
+ X-Mercurial-Node: 417defd1559c396ba06a44dce8dc1c2d2d653f3f
+ X-Mercurial-Series-Index: 2
+ X-Mercurial-Series-Total: 2
+ Message-Id: <417defd1559c396ba06a.347155262@*> (glob)
+ X-Mercurial-Series-Id: <accde9b8b6dce861c185.347155261@*> (glob)
+ In-Reply-To: <patchbomb.347155260@*> (glob)
+ References: <patchbomb.347155260@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1981 00:01:02 +0000
+ From: test
+ To: foo
+
+ # HG changeset patch
+ # User test
+ # Date 8 0
+ # Thu Jan 01 00:00:08 1970 +0000
+ # Node ID 417defd1559c396ba06a44dce8dc1c2d2d653f3f
+ # Parent accde9b8b6dce861c185d0825c1affc09a79cb26
+ second
+
+ diff -r accde9b8b6dc -r 417defd1559c b
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/b Thu Jan 01 00:00:08 1970 +0000
+ @@ -0,0 +1,1 @@
+ +second
+
+Do the same and combine with -o only one must be exported
+
+ $ cd ..
+ $ hg clone repo repo2
+ updating to bookmark @
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd repo
+ $ hg up @
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ (activating bookmark @)
+ $ hg book outgoing
+ $ echo 1 > x
+ $ hg ci -Am1 -d '8 0'
+ adding x
+ created new head
+ $ hg push ../repo2 -B outgoing
+ pushing to ../repo2
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ exporting bookmark outgoing
+ $ echo 2 > y
+ $ hg ci -Am2 -d '9 0'
+ adding y
+ $ hg email --date '1982-1-1 0:1' -n -t foo -s bookmark -B outgoing -o ../repo2
+ comparing with ../repo2
+ From [test]: test
+ this patch series consists of 1 patches.
+
+ Cc:
+
+ displaying [PATCH] bookmark ...
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Subject: [PATCH] bookmark
+ X-Mercurial-Node: 8dab2639fd35f1e337ad866c372a5c44f1064e3c
+ X-Mercurial-Series-Index: 1
+ X-Mercurial-Series-Total: 1
+ Message-Id: <8dab2639fd35f1e337ad.378691260@*> (glob)
+ X-Mercurial-Series-Id: <8dab2639fd35f1e337ad.378691260@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Fri, 01 Jan 1982 00:01:00 +0000
+ From: test
+ To: foo
+
+ # HG changeset patch
+ # User test
+ # Date 9 0
+ # Thu Jan 01 00:00:09 1970 +0000
+ # Node ID 8dab2639fd35f1e337ad866c372a5c44f1064e3c
+ # Parent 0b24b8316483bf30bfc3e4d4168e922b169dbe66
+ 2
+
+ diff -r 0b24b8316483 -r 8dab2639fd35 y
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/y Thu Jan 01 00:00:09 1970 +0000
+ @@ -0,0 +1,1 @@
+ +2
+