# HG changeset patch # User Sushil khanchi # Date 1557060899 -19800 # Node ID c0e9a3c01c44c2b6950d4bc2f4eb6c8e95fe8104 # Parent ea9ae2d2095a6bac403a3a8f7a49dcd746b862dd evolve: consider using three way merge to get the user for div resolution This patch adds the logic to merge the users from two divergent csets considering the base (i.e three way merge). The case when all the three are different, we concatenate the two authors of divergent csets. diff -r ea9ae2d2095a -r c0e9a3c01c44 hgext3rd/evolve/evolvecmd.py --- a/hgext3rd/evolve/evolvecmd.py Sun May 05 18:24:50 2019 +0530 +++ b/hgext3rd/evolve/evolvecmd.py Sun May 05 18:24:59 2019 +0530 @@ -628,13 +628,14 @@ desc = mergecommitmessages(ui, base.description(), divergent.description(), other.description()) + user = utility.mergeusers(ui, base, divergent, other) # new node if any formed as the replacement newnode = None mergehook(repo, base, divergent, other) - newnode = repo.commit(text=desc, user=other.user()) + newnode = repo.commit(text=desc, user=user) if newnode == divergent.node() or newnode is None: # no changes new = divergent diff -r ea9ae2d2095a -r c0e9a3c01c44 hgext3rd/evolve/utility.py --- a/hgext3rd/evolve/utility.py Sun May 05 18:24:50 2019 +0530 +++ b/hgext3rd/evolve/utility.py Sun May 05 18:24:59 2019 +0530 @@ -187,3 +187,26 @@ return None return revs[intidx - 1] + +def mergeusers(ui, base, divergent, other): + """ merges the users from two divergent changesets using three-way merge + and return the user that will be used as the author of resolved cset""" + baseuser = base.user() + divuser = divergent.user() + othuser = other.user() + + if divuser == othuser: + return divuser + else: + if baseuser == divuser: + return othuser + elif baseuser == othuser: + return divuser + else: + # all three are different, lets concatenate the two authors + # XXX: should we let the user know about concatenation of authors + # by printing some message (or maybe in verbose mode) + users = set(divuser.split(', ')) + users.update(othuser.split(', ')) + user = ', '.join(sorted(users)) + return user diff -r ea9ae2d2095a -r c0e9a3c01c44 tests/test-evolve-content-divergent-meta.t --- a/tests/test-evolve-content-divergent-meta.t Sun May 05 18:24:50 2019 +0530 +++ b/tests/test-evolve-content-divergent-meta.t Sun May 05 18:24:59 2019 +0530 @@ -151,9 +151,9 @@ with: [5] updated c base: [2] added c 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 85c4e0b92028 + working directory is now at 202a770d8c1f $ hg log -r tip | grep "^user" - user: baruser + user: baruser, foouser $ cd ..