Mercurial > evolve
changeset 4636:c0e9a3c01c44
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.
author | Sushil khanchi <sushilkhanchi97@gmail.com> |
---|---|
date | Sun, 05 May 2019 18:24:59 +0530 |
parents | ea9ae2d2095a |
children | 4a22dac48b42 |
files | hgext3rd/evolve/evolvecmd.py hgext3rd/evolve/utility.py tests/test-evolve-content-divergent-meta.t |
diffstat | 3 files changed, 27 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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
--- 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 ..