--- a/hgext3rd/topic/__init__.py Fri Sep 01 17:09:17 2017 +0200
+++ b/hgext3rd/topic/__init__.py Fri Sep 01 18:33:08 2017 +0200
@@ -488,7 +488,8 @@
wlock = repo.wlock()
lock = repo.lock()
tr = repo.transaction('debugconvertbookmark')
- _convertbmarktopic(ui, repo, revnum, bookmark, tr)
+ targetrevs = _findconvertbmarktopic(repo, bookmark)
+ _applyconvertbmarktopic(ui, repo, targetrevs, revnum, bookmark, tr)
tr.close()
finally:
lockmod.release(tr, lock, wlock)
@@ -512,7 +513,8 @@
continue
if bmark == '@':
continue
- _convertbmarktopic(ui, repo, revnum, bmark, tr)
+ targetrevs = _findconvertbmarktopic(repo, bmark)
+ _applyconvertbmarktopic(ui, repo, targetrevs, revnum, bmark, tr)
tr.close()
finally:
lockmod.release(tr, lock, wlock)
@@ -534,15 +536,23 @@
)
"""
-def _convertbmarktopic(ui, repo, rev, bmark, tr):
- """Sets a topic as same as bname to all the changesets under the bookmark
+def _findconvertbmarktopic(repo, bmark):
+ """find revisions unambigiously defined by a bookmark
+
+ find all changesets under the bookmark and under that bookmark only.
+ """
+ return repo.revs(CONVERTBOOKREVSET, bmark, bmark, bmark)
+
+def _applyconvertbmarktopic(ui, repo, revs, old, bmark, tr):
+ """apply bookmark convertion to topic
+
+ Sets a topic as same as bname to all the changesets under the bookmark
and delete the bookmark, if topic is set to any changeset
- rev is the revision on which bookmark bmark is and tr is transaction object.
+ old is the revision on which bookmark bmark is and tr is transaction object.
"""
- touchedrevs = repo.revs(CONVERTBOOKREVSET, bmark, bmark, bmark)
- rewrote = _changetopics(ui, repo, touchedrevs, bmark)
+ rewrote = _changetopics(ui, repo, revs, bmark)
# We didn't changed topic to any changesets because the revset
# returned an empty set of revisions, so let's skip deleting the
# bookmark corresponding to which we didn't put a topic on any
@@ -551,7 +561,7 @@
return
ui.status(_('changed topic to "%s" on %d revisions\n') % (bmark,
rewrote))
- ui.debug('removing bookmark "%s" from "%d"' % (bmark, rev))
+ ui.debug('removing bookmark "%s" from "%d"' % (bmark, old))
bookmarks.delete(repo, tr, [bmark])
def _changecurrenttopic(repo, newtopic):