Mercurial > hg > mercurial-source
changeset 33422:c2fe2b00db53
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.
author | David Demelier <demelier.david@gmail.com> |
---|---|
date | Fri, 03 Feb 2017 15:02:27 +0100 |
parents | 4f6645ec6bb2 |
children | aeac3cbcbbc1 |
files | hgext/patchbomb.py tests/test-patchbomb-bookmark.t |
diffstat | 2 files changed, 182 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/patchbomb.py +++ b/hgext/patchbomb.py @@ -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:
new file mode 100644 --- /dev/null +++ b/tests/test-patchbomb-bookmark.t @@ -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 +