Mercurial > evolve
changeset 2900:1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
When a user tries to converts a bookmark to topic which is on a changeset with
more bookmarks we skip that.
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 14 Aug 2017 14:36:11 +0530 |
parents | 32306ee32806 |
children | 52e6b28704a7 |
files | hgext3rd/topic/__init__.py tests/test-topic-debugcb.t |
diffstat | 2 files changed, 35 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext3rd/topic/__init__.py Fri Sep 01 18:02:50 2017 +0200 +++ b/hgext3rd/topic/__init__.py Mon Aug 14 14:36:11 2017 +0530 @@ -460,12 +460,29 @@ bmstore = repo._bookmarks lock = wlock = tr = None + nodetobook = {} + for book, revnode in bmstore.iteritems(): + if nodetobook.get(revnode): + nodetobook[revnode].append(book) + else: + nodetobook[revnode] = [book] + + # a list of nodes which we have skipped so that we don't print the skip + # warning repeatedly + skipped = [] + if bookmark: try: node = bmstore[bookmark] except KeyError: raise error.Abort(_("no such bookmark exists: '%s'") % bookmark) + if len(nodetobook[node]) > 1: + revnum = repo[node].rev() + ui.status(_("skipping revision '%d' as it has multiple bookmarks " + "on it\n") % revnum) + return + revnum = repo[node].rev() try: wlock = repo.wlock() @@ -485,9 +502,17 @@ lock = repo.lock() tr = repo.transaction('debugconvertbookmark') for bmark, revnode in sorted(storecopy.iteritems()): + revnum = repo[revnode].rev() + if revnum in skipped: + continue + if len(nodetobook[revnode]) > 1: + ui.status(_("skipping '%d' as it has multiple bookmarks on" + " it\n") % revnum) + skipped.append(revnum) + continue if bmark == '@': continue - _convertbmarktopic(ui, repo, repo[revnode].rev(), bmark, tr) + _convertbmarktopic(ui, repo, revnum, bmark, tr) tr.close() finally: lockmod.release(tr, lock, wlock)
--- a/tests/test-topic-debugcb.t Fri Sep 01 18:02:50 2017 +0200 +++ b/tests/test-topic-debugcb.t Mon Aug 14 14:36:11 2017 +0530 @@ -106,26 +106,17 @@ |/ topic: hellos o [0:3caf92e45cfb] First commit -XXX: When we have multiple bookmarks on the same changeset, we should skip that -and do nothing. This should be fixed. - $ hg debugconvertbookmark --all - switching to topic book1 - changed topic to "book1" on 3 revisions - changed topic to "book2" on 3 revisions + skipping '7' as it has multiple bookmarks on it $ hg log -G - o [13:f979f772bd7d] Trying multiple bookmarks - | topic: book2 - o [12:2397fdab7b79] Fixing second - | topic: book2 - o [11:0dd194861ea1] Fixing first - | topic: book2 - | @ [10:e738ed1df4b2] Trying multiple bookmarks - | | topic: book1 - | o [9:4198fce21412] Fixing second - | | topic: book1 - | o [8:221a9ddef504] Fixing first - |/ topic: book1 + @ [7:7c46b4bbdda3] Trying multiple bookmarks + | bookmark: book1 + | bookmark:book2 + | topic: secondfix + o [6:6efc0524f97a] Fixing second + | topic: secondfix + o [5:0a4244c62a16] Fixing first + | topic: secondfix | o [4:ca8825a7eb18] Second commit |/ topic: hellos o [0:3caf92e45cfb] First commit