From 14440f1fcfe59473b95a3c61ffc194107a386c1b Mon Sep 17 00:00:00 2001 From: Jun Wu Date: Sat, 24 Jun 2017 23:18:52 -0700 Subject: [PATCH] tweakdefaults: add bookmark -D support Summary: It got removed from inhibit by D5258813. It's a useful feature so let's re-implement it in tweakdefaults. Test Plan: Added test cases with plain strip and fbamend's safe strip. Reviewers: #mercurial, durham Reviewed By: durham Subscribers: medson, mjpieters Differential Revision: https://phabricator.intern.facebook.com/D5313291 Signature: t1:5313291:1498321590:03e61a5b1acc2df44afcfd6ceb723e17c648ce79 --- hgext3rd/tweakdefaults.py | 21 +++++++++++++ tests/test-tweakdefaults.t | 62 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/hgext3rd/tweakdefaults.py b/hgext3rd/tweakdefaults.py index f6bd023154..c7b1a82822 100644 --- a/hgext3rd/tweakdefaults.py +++ b/hgext3rd/tweakdefaults.py @@ -53,6 +53,7 @@ Config:: from mercurial.i18n import _ from mercurial import ( bookmarks, + cmdutil, commands, error, encoding, @@ -173,6 +174,11 @@ def extsetup(ui): # metadata (e.g. 'amend', 'rebase' and so forth) wrapfunction(obsolete, 'createmarkers', _createmarkers) + # bookmark -D is an alias to strip -B + entry = wrapcommand(commands.table, 'bookmarks', bookmarkcmd) + entry[1].insert(3, ('D', 'strip', None, + _('like --delete but also strip changesets'))) + # wrap bookmarks after remotenames def afterloaded(loaded): if loaded: @@ -792,6 +798,21 @@ def tagscmd(orig, ui, repo, **opts): ui.warn(message + '\n') return orig(ui, repo, **opts) +def bookmarkcmd(orig, ui, repo, *names, **opts): + strip = opts.pop('strip') + if not strip: + return orig(ui, repo, *names, **opts) + # check conflicted opts + for name in ['force', 'rev', 'rename', 'inactive', 'track', 'untrack', + 'all', 'remote']: + if opts.get(name): + raise error.Abort(_('--strip cannot be used together with %s') + % ('--%s' % name)) + + # call strip -B, may raise UnknownCommand + stripfunc = cmdutil.findcmd('strip', commands.table)[1][0] + return stripfunc(ui, repo, bookmark=names, rev=[]) + def unfilteredcmd(orig, *args, **opts): # use unfiltered repo for performance # diff --git a/tests/test-tweakdefaults.t b/tests/test-tweakdefaults.t index a11594b9dc..03ef243018 100644 --- a/tests/test-tweakdefaults.t +++ b/tests/test-tweakdefaults.t @@ -545,3 +545,65 @@ Test diff --per-file-stat +b $ hg diff -r ".^" -r . --per-file-stat-json {"a": {"adds": 1, "isbinary": false, "removes": 0}, "b": {"adds": 1, "isbinary": false, "removes": 0}} + +Test bookmark -D + $ cd $TESTTMP + $ hg init book-D + $ cd book-D + $ cat >> .hg/hgrc < [extensions] + > strip= + > [experimental] + > evolution=all + > EOF + $ hg debugbuilddag '+4*2*2*2' + $ hg bookmark -i -r 1 master + $ hg bookmark -i -r 5 feature1 + $ hg bookmark -i -r 6 feature2 + $ hg log -G -T '{rev} {bookmarks}' -r 'all()' + o 6 feature2 + | + | o 5 feature1 + | | + o | 4 + | | + | o 3 + |/ + o 2 + | + o 1 master + | + o 0 + + $ hg bookmark -D feature1 + bookmark 'feature1' deleted + 2 changesets pruned + $ hg log -G -T '{rev} {bookmarks}' -r 'all()' --hidden + o 6 feature2 + | + | x 5 + | | + o | 4 + | | + | x 3 + |/ + o 2 + | + o 1 master + | + o 0 + + $ hg bookmark -D feature2 --config extensions.fbamend=! + saved backup bundle to $TESTTMP/book-D/.hg/strip-backup/1c4dfc7a8985-4027cf08-backup.hg (glob) + bookmark 'feature2' deleted + $ hg log -G -T '{rev} {bookmarks}' -r 'all()' --hidden + x 4 + | + x 3 + | + o 2 + | + o 1 master + | + o 0 +