--- a/hgext3rd/evolve/evolvecmd.py Tue May 05 16:29:52 2020 +0800
+++ b/hgext3rd/evolve/evolvecmd.py Thu Apr 30 10:05:14 2020 -0700
@@ -676,23 +676,26 @@
else:
date = max(divergent.date(), other.date())
- # new node if any formed as the replacement
- newnode = repo.commit(text=desc, user=user, date=date)
- if newnode == divergent.node() or newnode is None:
- # no changes
- new = divergent
- storemarker = True
- repo.ui.status(_(b"nothing changed\n"))
- hg.updaterepo(repo, divergent.rev(), False)
+ # We really want a new commit in order to avoid obsmarker cycles (otherwise
+ # divergence resolutions done in separate repos may create markers in the
+ # opposite directions). For that reason, we set ui.allowemptycommit and
+ # also add also add some salt to the commit extras to make sure we don't
+ # reuse an existing nodeid.
+ with repo.ui.configoverride(
+ {(b'ui', b'allowemptycommit'): b'true'}, b'evolve'
+ ):
+ extra = {
+ b'evolve_source_local': divergent.hex(),
+ b'evolve_source_other': other.hex()
+ }
+ newnode = repo.commit(text=desc, user=user, date=date, extra=extra)
+ new = repo[newnode]
+ hg.updaterepo(repo, new.rev(), False)
+ if haspubdiv and publicdiv == divergent:
+ bypassphase(repo, (divergent, new), operation=b'evolve')
else:
- new = repo[newnode]
- newnode = new.node()
- hg.updaterepo(repo, new.rev(), False)
- if haspubdiv and publicdiv == divergent:
- bypassphase(repo, (divergent, new), operation=b'evolve')
- else:
- obsolete.createmarkers(repo, [(divergent, (new,))],
- operation=b'evolve')
+ obsolete.createmarkers(repo, [(divergent, (new,))],
+ operation=b'evolve')
# creating markers and moving phases post-resolution
if haspubdiv and publicdiv == other: