# HG changeset patch # User Manuel Jacob # Date 1570822347 -7200 # Node ID 88b816a9d990548b3cad7c990d213d0f432eba31 # Parent e989d109ca9c60558f53e8cc1d611d83623a3b05 evolve: preserve date when resolving content-divergence (issue6202) This patch changes the implementation to do a 3 way merge. In case of actual conflict, it take the newest date from both sides of the content-divergence. diff -r e989d109ca9c -r 88b816a9d990 hgext3rd/evolve/evolvecmd.py --- a/hgext3rd/evolve/evolvecmd.py Tue Dec 10 19:58:51 2019 +0100 +++ b/hgext3rd/evolve/evolvecmd.py Fri Oct 11 21:32:27 2019 +0200 @@ -653,7 +653,17 @@ mergehook(repo, base, divergent, other) - newnode = repo.commit(text=desc, user=user) + date = divergent.date() + if other.date() != divergent.date(): + basedate = base.date() + if other.date() == basedate: + date = divergent.date() + elif divergent.date() == basedate: + date = other.date() + else: + date = max(divergent.date(), other.date()) + + newnode = repo.commit(text=desc, user=user, date=date) if newnode == divergent.node() or newnode is None: # no changes new = divergent diff -r e989d109ca9c -r 88b816a9d990 tests/test-evolve-issue5958.t --- a/tests/test-evolve-issue5958.t Tue Dec 10 19:58:51 2019 +0100 +++ b/tests/test-evolve-issue5958.t Fri Oct 11 21:32:27 2019 +0200 @@ -96,42 +96,41 @@ base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved 1 new orphan changesets - working directory is now at 2372e6d39855 + working directory is now at 459c64f7eaad $ hg log -r 'desc("add foo.txt")' -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 4 c17bf400a278 1969-12-31 23:59 -0000: rewritten using evolve as 7:2372e6d39855 - 7 2372e6d39855 1970-01-01 00:00 +0000: - 7 bb2424887202 1969-12-31 23:59 +0000: (false !) + 4 c17bf400a278 1969-12-31 23:59 -0000: rewritten using evolve as 7:459c64f7eaad + 7 459c64f7eaad 1969-12-31 23:59 -0000: date: updated one one side to an older value $ hg evolve -r . move:[7] add foo.txt atop:[0] add r0 - working directory is now at 2b9788beff53 + working directory is now at 545776b4e79f $ hg update --hidden --rev 'predecessors(.)' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - updated to hidden changeset 2372e6d39855 - (hidden revision '2372e6d39855' was rewritten as: 2b9788beff53) - working directory parent is obsolete! (2372e6d39855) - (use 'hg evolve' to update to its successor: 2b9788beff53) - $ hg amend --date "0 2" + updated to hidden changeset 459c64f7eaad + (hidden revision '459c64f7eaad' was rewritten as: 545776b4e79f) + working directory parent is obsolete! (459c64f7eaad) + (use 'hg evolve' to update to its successor: 545776b4e79f) + $ hg amend --date "0 3" 1 new orphan changesets 2 new content-divergent changesets $ hg rebase -r . -d 0 - rebasing 9:88085147662e "add foo.txt" (tip) + rebasing 9:c117f15338e6 "add foo.txt" (tip) $ hg log -G - @ changeset: 10:873d828420d8 + @ changeset: 10:7a09c7a39546 | tag: tip | parent: 0:a24ed8ad918c | user: test - | date: Wed Dec 31 23:59:58 1969 -0000 + | date: Wed Dec 31 23:59:57 1969 -0000 | instability: content-divergent | summary: add foo.txt | - | * changeset: 8:2b9788beff53 + | * changeset: 8:545776b4e79f |/ parent: 0:a24ed8ad918c | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 + | date: Wed Dec 31 23:59:58 1969 -0000 | instability: content-divergent | summary: add foo.txt | @@ -141,35 +140,34 @@ summary: add r0 $ hg evolve --list -r . - 873d828420d8: add foo.txt - content-divergent: 2b9788beff53 (draft) (precursor 2372e6d39855) + 7a09c7a39546: add foo.txt + content-divergent: 545776b4e79f (draft) (precursor 459c64f7eaad) - $ hg log -r 2372e6d39855+873d828420d8+2b9788beff53 --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 7 2372e6d39855 1970-01-01 00:00 +0000: date-changed using amend as 9:88085147662e; rebased using evolve as 8:2b9788beff53 - 10 873d828420d8 1969-12-31 23:59 -0000: - 8 2b9788beff53 1970-01-01 00:00 +0000: + $ hg log -r 459c64f7eaad+7a09c7a39546+545776b4e79f --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' + 7 459c64f7eaad 1969-12-31 23:59 -0000: date-changed using amend as 9:c117f15338e6; rebased using evolve as 8:545776b4e79f + 10 7a09c7a39546 1969-12-31 23:59 -0000: + 8 545776b4e79f 1969-12-31 23:59 -0000: $ hg evolve --content-divergent merge:[8] add foo.txt with: [10] add foo.txt base: [7] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at bb2424887202 + working directory is now at 39c4200c0d94 $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 11 bb2424887202 1970-01-01 00:00 +0000: - 11 bb2424887202 1969-12-31 23:59 +0000: (false !) + 11 39c4200c0d94 1969-12-31 23:59 -0000: date: updated one side to an newer value $ hg update --hidden --rev 'predecessors(.)' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - updated to hidden changeset 873d828420d8 - (hidden revision '873d828420d8' was rewritten as: bb2424887202) - working directory parent is obsolete! (873d828420d8) - (use 'hg evolve' to update to its successor: bb2424887202) + updated to hidden changeset 7a09c7a39546 + (hidden revision '7a09c7a39546' was rewritten as: 39c4200c0d94) + working directory parent is obsolete! (7a09c7a39546) + (use 'hg evolve' to update to its successor: 39c4200c0d94) $ hg amend --date "120 0" 2 new content-divergent changesets $ hg log -G - @ changeset: 12:902e190ef559 + @ changeset: 12:da3be3d72fe2 | tag: tip | parent: 0:a24ed8ad918c | user: test @@ -177,10 +175,10 @@ | instability: content-divergent | summary: add foo.txt | - | * changeset: 11:bb2424887202 + | * changeset: 11:39c4200c0d94 |/ parent: 0:a24ed8ad918c | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 + | date: Wed Dec 31 23:59:57 1969 -0000 | instability: content-divergent | summary: add foo.txt | @@ -190,38 +188,37 @@ summary: add r0 $ hg evolve --list -r . - 902e190ef559: add foo.txt - content-divergent: bb2424887202 (draft) (precursor 873d828420d8) + da3be3d72fe2: add foo.txt + content-divergent: 39c4200c0d94 (draft) (precursor 7a09c7a39546) - $ hg up bb2424887202 + $ hg up 39c4200c0d94 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -r 873d828420d8+bb2424887202+902e190ef559 --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 10 873d828420d8 1969-12-31 23:59 -0000: date-changed using evolve as 11:bb2424887202; date-changed using amend as 12:902e190ef559 - 11 bb2424887202 1970-01-01 00:00 +0000: - 12 902e190ef559 1970-01-01 00:02 +0000: + $ hg log -r 7a09c7a39546+39c4200c0d94+da3be3d72fe2 --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' + 10 7a09c7a39546 1969-12-31 23:59 -0000: date-changed using amend as 12:da3be3d72fe2; rewritten using evolve as 11:39c4200c0d94 + 11 39c4200c0d94 1969-12-31 23:59 -0000: + 12 da3be3d72fe2 1970-01-01 00:02 +0000: $ hg evolve --content-divergent merge:[11] add foo.txt with: [12] add foo.txt base: [10] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - nothing changed + working directory is now at 06cde6010a51 $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 11 bb2424887202 1970-01-01 00:00 +0000: - 13 bb2424887202 1970-01-01 00:02 +0000: (false !) + 13 06cde6010a51 1970-01-01 00:02 +0000: date: updated each side to a different value, newer should win $ hg amend --date "235 0" $ hg update --hidden --rev 'predecessors(.)' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - updated to hidden changeset bb2424887202 - (hidden revision 'bb2424887202' was rewritten as: 48132e92d706) - working directory parent is obsolete! (bb2424887202) - (use 'hg evolve' to update to its successor: 48132e92d706) + updated to hidden changeset 06cde6010a51 + (hidden revision '06cde6010a51' was rewritten as: a7412ff9bfb3) + working directory parent is obsolete! (06cde6010a51) + (use 'hg evolve' to update to its successor: a7412ff9bfb3) $ hg amend --date "784 0" 2 new content-divergent changesets $ hg log -G - @ changeset: 14:694c3cf6b929 + @ changeset: 15:e3077936ec52 | tag: tip | parent: 0:a24ed8ad918c | user: test @@ -229,7 +226,7 @@ | instability: content-divergent | summary: add foo.txt | - | * changeset: 13:48132e92d706 + | * changeset: 14:a7412ff9bfb3 |/ parent: 0:a24ed8ad918c | user: test | date: Thu Jan 01 00:03:55 1970 +0000 @@ -242,19 +239,18 @@ summary: add r0 $ hg evolve --list -r . - 694c3cf6b929: add foo.txt - content-divergent: 48132e92d706 (draft) (precursor bb2424887202) + e3077936ec52: add foo.txt + content-divergent: a7412ff9bfb3 (draft) (precursor 06cde6010a51) - $ hg log -r bb2424887202+48132e92d706+694c3cf6b929 --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 11 bb2424887202 1970-01-01 00:00 +0000: date-changed using amend as 14:694c3cf6b929; date-changed using amend as 13:48132e92d706 - 13 48132e92d706 1970-01-01 00:03 +0000: - 14 694c3cf6b929 1970-01-01 00:13 +0000: + $ hg log -r 39c4200c0d94+a7412ff9bfb3+e3077936ec52 --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' + 11 39c4200c0d94 1969-12-31 23:59 -0000: date-changed using evolve as 13:06cde6010a51 + 14 a7412ff9bfb3 1970-01-01 00:03 +0000: + 15 e3077936ec52 1970-01-01 00:13 +0000: $ hg evolve --content-divergent - merge:[13] add foo.txt - with: [14] add foo.txt - base: [12] add foo.txt + merge:[14] add foo.txt + with: [15] add foo.txt + base: [13] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at a24ed8ad918c + working directory is now at 1a39f3901288 $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 0 a24ed8ad918c 1970-01-01 00:00 +0000: - 16 bb2424887202 1970-01-01 00:13 +0000: (false !) + 16 1a39f3901288 1970-01-01 00:13 +0000: diff -r e989d109ca9c -r 88b816a9d990 tests/test-topic-stack-complex.t --- a/tests/test-topic-stack-complex.t Tue Dec 10 19:58:51 2019 +0100 +++ b/tests/test-topic-stack-complex.t Fri Oct 11 21:32:27 2019 +0200 @@ -176,4 +176,7 @@ with: [s4] Added e and f base: [3] Added e and f 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 8faad6276dc6 + working directory is now at 80b2ddbf01d3 + + $ hg log -r 80b2ddbf01d3 -T '{date|hgdate}\n' + 0 1