# HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 1498009910 -19800 # Node ID b5723184fc62d4605a591af88f49f92e8229d5f9 # Parent 2e3f63f4a5190a094babbc9ec7412dc9f0f78bc3 topics: use a dict for successors of changesets produced by topic change This patch adds a dictionary to store the successors of changesets which got obsoleted when we change it's topic. This is an improvement in the fix for issue5441. diff -r 2e3f63f4a519 -r b5723184fc62 hgext3rd/topic/__init__.py --- a/hgext3rd/topic/__init__.py Wed Jun 21 11:55:45 2017 +0200 +++ b/hgext3rd/topic/__init__.py Wed Jun 21 07:21:50 2017 +0530 @@ -309,10 +309,9 @@ l = repo.lock() txn = repo.transaction('rewrite-topics') try: - newp = None - oldp = None p1 = None p2 = None + successors = {} for c in repo.set('%r', revset): def filectxfn(repo, ctx, path): try: @@ -342,22 +341,18 @@ # While changing topic of set of linear commits, make sure that # we base our commits on new parent rather than old parent which # was obsoleted while changing the topic - if newp and c.p1().node() == oldp: - p1 = newp - p2 = c.p2().node() - elif newp and c.p2().node() == oldp: - p1 = c.p1().node() - p2 = newp - else: - p1 = c.p1().node() - p2 = c.p2().node() + p1 = c.p1().node() + p2 = c.p2().node() + if p1 in successors: + p1 = successors[p1] + if p2 in successors: + p2 = successors[p2] mc = context.memctx( repo, (p1, p2), c.description(), c.files(), filectxfn, user=c.user(), date=c.date(), extra=fixedextra) newnode = repo.commitctx(mc) - oldp = c.node() - newp = newnode + successors[c.node()] = newnode ui.debug('new node id is %s\n' % node.hex(newnode)) needevolve = needevolve or (len(c.children()) > 0) obsolete.createmarkers(repo, [(c, (repo[newnode],))]) diff -r 2e3f63f4a519 -r b5723184fc62 tests/test-topic.t --- a/tests/test-topic.t Wed Jun 21 11:55:45 2017 +0200 +++ b/tests/test-topic.t Wed Jun 21 07:21:50 2017 +0530 @@ -707,3 +707,73 @@ | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | + +Case with branching: + + $ hg up changewat + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg up t1 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo gamma >> gamma + $ hg ci -m gamma + $ hg log -Gr 'draft()' + @ changeset: 22:373f490f8854 + | tag: tip + | topic: changewat + | parent: 20:a96ac830b62e + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: gamma + | + | o changeset: 21:58e15a6365ca + |/ topic: changewat + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: fran? + | + o changeset: 20:a96ac830b62e + | topic: changewat + | parent: 3:a53952faf762 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: start on fran + | + $ hg topics --rev 't1::' changewut + changed topic on 3 changes + please run hg evolve --rev "topic(changewut)" now + $ hg log -Gr 'draft()' + o changeset: 25:05d1bf93e1d8 + | tag: tip + | topic: changewut + | parent: 23:1f668635e0c2 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: gamma + | + | o changeset: 24:696f1024fbfb + |/ topic: changewut + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: fran? + | + o changeset: 23:1f668635e0c2 + | topic: changewut + | parent: 3:a53952faf762 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: start on fran + | + | @ changeset: 22:373f490f8854 + | | topic: changewat + | | parent: 20:a96ac830b62e + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: gamma + | | + | x changeset: 20:a96ac830b62e + |/ topic: changewat + | parent: 3:a53952faf762 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: start on fran + |