Mercurial > evolve
view tests/test-evolve-content-divergent-meta.t @ 5572:d7d954b6d518
evolve: remove swapping nodes logic while resolving divergence
Before this patch, while solving content-divergence if one of the
divergent cset need to relocate to resolution parent we used to set that
cset to "other" side; so it was like we are always going to relocate "other"
side which made us to swap the two if "divergent" cset need to relocate.
Above mentioned solution for relocating cset was not good and led us to incorrect
output in some cases.
So this patch, simplify the logic and remove the swapping thing and clearly depend
on resolution parent to check if any of the divergent cset needs to relocate.
This also means that now in some cases if both the divergent csets needs
to relocate, both will be relocated. Even before this patch, there are some cases
where both the divergent csets relocated but not in every case where it should
have.
Coming to the changes in test files:
1) changes in order of merging the two divergent csets is due to fact that
now "divergent" and "other" are not swapped and hence "divergent" will be at
local side and "other" will be at "other", which also results in change in
the hash id for some cases.
2) extra changesets: which is the result of the fact that now we don't miss
any case where both the divergent csets should be based on resolution parent
before performing the merge -> which caught some cases and performed relocation,
hence extra changesets. Although you can find that there is no changes in file
content because of these relocation, but I remember loosing some data because
of not relocating the "divergent", so why leave any risk out there by not
relocating "other" to the resolution parent.
author | Sushil khanchi <sushilkhanchi97@gmail.com> |
---|---|
date | Sun, 20 Sep 2020 09:22:04 +0530 |
parents | a73cdef2e33f |
children | 88f9bbba392d |
line wrap: on
line source
+==================================================== +Tests the resolution of content divergence: metadata +==================================================== This file intend to cover cases focused around meta data merging. Setup ----- $ cat >> $HGRCPATH <<EOF > [alias] > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {instabilities}\n\n" > [phases] > publish = False > [experimental] > evolution.allowdivergence = True > [extensions] > rebase = > strip = > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH Check we preserve the author properly ------------------------------------- Testing issue6113 to make sure that content-divergence resolution don't replace initial author with the user running the resolution command: $ hg init userfoo $ cd userfoo $ unset HGUSER $ echo "[ui]" >> ./.hg/hgrc $ echo "username = foo <foo@test.com>" >> ./.hg/hgrc $ for ch in a b c; do > echo $ch > $ch; > hg add $ch; > hg ci -m "added "$ch; > done; $ cd .. $ hg init userbar $ cd userbar $ unset HGUSER $ echo "[ui]" >> ./.hg/hgrc $ echo "username = bar <bar@test.com>" >> ./.hg/hgrc $ hg pull ./../userfoo -q $ cd ../userfoo $ hg up -r "desc('added b')" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo c > c $ echo e > e $ hg add c e $ hg ci -m "added c e" created new head $ hg up -r "desc('added b')" 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ echo cc > c $ hg add c $ hg ci -m "added c" created new head $ hg prune -r "min(desc('added c'))" -s "desc('added c e')" 1 changesets pruned $ hg prune -r "min(desc('added c'))" -s "max(desc('added c'))" --hidden 1 changesets pruned 2 new content-divergent changesets $ hg glog @ 4:6c06cda6dc99 added c | draft content-divergent | | * 3:0c9267e23c9d added c e |/ draft content-divergent | o 1:1740ad2a1eda added b | draft | o 0:f863f39764c4 added a draft $ cd ../userbar $ hg pull ./../userfoo -q 2 new content-divergent changesets $ hg evolve --content-divergent --any merge:[3] added c e with: [4] added c base: [2] added c 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Make sure resultant cset don't replace the initial user with user running the command: $ hg log -r tip changeset: 5:8cabe7248d20 tag: tip parent: 1:1740ad2a1eda user: foo <foo@test.com> date: Thu Jan 01 00:00:00 1970 +0000 summary: added c e $ cd .. Testing the three way merge logic for user of content divergent changesets -------------------------------------------------------------------------- $ hg init mergeusers $ cd mergeusers $ for ch in a b c; do > touch $ch > hg add $ch > hg ci -m "added "$ch > done; $ hg amend -m "updated c" $ hg up -r 'desc("added c")' --hidden -q updated to hidden changeset 2b3c31fe982d (hidden revision '2b3c31fe982d' was rewritten as: 464e35020fd0) working directory parent is obsolete! (2b3c31fe982d) $ echo coco > c 1) when one user is different wrt base -------------------------------------- Insert a diverging author name: $ hg amend -u 'foouser' 2 new content-divergent changesets Run automatic evolution: $ hg evolve --content-divergent merge:[3] updated c with: [4] added c base: [2] added c 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 2300a271820b $ hg log -r tip | grep "^user" user: foouser $ hg strip . -q --config extensions.strip= 2 new content-divergent changesets 2) when both the user are different wrt base -------------------------------------------- $ hg up -r 'max(desc("updated c"))' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg amend -u 'baruser' Run automatic evolution: $ hg evolve --content-divergent merge:[4] added c 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 3d7ae55fbfe4 $ hg log -r tip | grep "^user" user: baruser, foouser $ cd .. Test the content-divergence resolution involving date update ------------------------------------------------------------ $ hg init divergingdate $ cd divergingdate $ unset HGUSER $ echo "[ui]" >> ./.hg/hgrc $ echo "username = test" >> ./.hg/hgrc $ echo hi > r0 $ hg ci -qAm 'add r0' $ echo hi > foo.txt $ hg ci -qAm 'add foo.txt' $ hg metaedit -r . -d '0 2' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved date: updated on both side to the same value $ echo hi > bar.txt $ hg add -q bar.txt $ hg amend -q $ hg metaedit -r 1 -d '0 1' --hidden 2 new content-divergent changesets $ hg log -G * changeset: 4:c17bf400a278 | tag: tip | parent: 0:a24ed8ad918c | user: test | date: Wed Dec 31 23:59:59 1969 -0000 | instability: content-divergent | summary: add foo.txt | | @ changeset: 3:a25dd7af6cf6 |/ parent: 0:a24ed8ad918c | user: test | date: Wed Dec 31 23:59:58 1969 -0000 | instability: content-divergent | summary: add foo.txt | o changeset: 0:a24ed8ad918c user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: add r0 $ hg evolve --list --rev . a25dd7af6cf6: add foo.txt content-divergent: c17bf400a278 (draft) (precursor cc71ffbc7c00) $ hg log --hidden -r cc71ffbc7c00 -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 1 cc71ffbc7c00 1970-01-01 00:00 +0000: date-changed using metaedit as 4:c17bf400a278; date-changed using metaedit as 2:0065551bd38f $ hg log -r 'desc("add foo.txt")' -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 3 a25dd7af6cf6 1969-12-31 23:59 -0000: 4 c17bf400a278 1969-12-31 23:59 -0000: $ hg evolve --content-divergent merge:[3] add foo.txt with: [4] add foo.txt base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at bbcfcd9b9e21 $ hg log -r 'desc("add foo.txt")' -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 5 bbcfcd9b9e21 1969-12-31 23:59 -0000: date: updated one one side to an older value $ hg strip . 0 files updated, 0 files merged, 2 files removed, 0 files unresolved saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/bbcfcd9b9e21-567273f3-backup.hg 2 new content-divergent changesets $ hg up tip 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg amend --date "0 3" $ hg log -G @ changeset: 5:6189a9adfff0 | tag: tip | parent: 0:a24ed8ad918c | user: test | date: Wed Dec 31 23:59:57 1969 -0000 | instability: content-divergent | summary: add foo.txt | | * changeset: 3:a25dd7af6cf6 |/ parent: 0:a24ed8ad918c | user: test | date: Wed Dec 31 23:59:58 1969 -0000 | instability: content-divergent | summary: add foo.txt | o changeset: 0:a24ed8ad918c user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: add r0 $ hg evolve --list -r . 6189a9adfff0: add foo.txt content-divergent: a25dd7af6cf6 (draft) (precursor cc71ffbc7c00) $ hg log -r cc71ffbc7c00+6189a9adfff0+a25dd7af6cf6 --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 1 cc71ffbc7c00 1970-01-01 00:00 +0000: date-changed using metaedit as 4:c17bf400a278; date-changed using metaedit as 2:0065551bd38f 5 6189a9adfff0 1969-12-31 23:59 -0000: 3 a25dd7af6cf6 1969-12-31 23:59 -0000: $ hg evolve --content-divergent merge:[3] add foo.txt with: [5] add foo.txt base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 4708538fed7d $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 6 4708538fed7d 1969-12-31 23:59 -0000: date: updated one side to an newer value $ hg strip . 0 files updated, 0 files merged, 2 files removed, 0 files unresolved saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/4708538fed7d-ca550351-backup.hg 2 new content-divergent changesets $ hg update a25dd7af6cf6 --hidden 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg amend --date "120 0" $ hg log -G @ changeset: 6:5199d0bc13d4 | tag: tip | parent: 0:a24ed8ad918c | user: test | date: Thu Jan 01 00:02:00 1970 +0000 | instability: content-divergent | summary: add foo.txt | | * changeset: 5:6189a9adfff0 |/ parent: 0:a24ed8ad918c | user: test | date: Wed Dec 31 23:59:57 1969 -0000 | instability: content-divergent | summary: add foo.txt | o changeset: 0:a24ed8ad918c user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: add r0 $ hg evolve --list -r . 5199d0bc13d4: add foo.txt content-divergent: 6189a9adfff0 (draft) (precursor cc71ffbc7c00) $ hg up 6189a9adfff0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg log -r cc71ffbc7c00+6189a9adfff0+5199d0bc13d4 --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 1 cc71ffbc7c00 1970-01-01 00:00 +0000: date-changed using metaedit as 4:c17bf400a278; date-changed using metaedit as 2:0065551bd38f 5 6189a9adfff0 1969-12-31 23:59 -0000: 6 5199d0bc13d4 1970-01-01 00:02 +0000: $ hg evolve --content-divergent merge:[5] add foo.txt with: [6] add foo.txt base: [1] add foo.txt 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at dbea1c7e245d $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 7 dbea1c7e245d 1970-01-01 00:02 +0000: date: updated each side to a different value, newer should win $ hg strip . 0 files updated, 0 files merged, 2 files removed, 0 files unresolved saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/dbea1c7e245d-47ae3d98-backup.hg 2 new content-divergent changesets $ hg up tip 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg amend --date "235 0" $ hg update 6189a9adfff0 --hidden 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg amend --date "784 0" $ hg log -G @ changeset: 8:75254fb3164b | tag: tip | parent: 0:a24ed8ad918c | user: test | date: Thu Jan 01 00:13:04 1970 +0000 | instability: content-divergent | summary: add foo.txt | | * changeset: 7:5421a7efcc6e |/ parent: 0:a24ed8ad918c | user: test | date: Thu Jan 01 00:03:55 1970 +0000 | instability: content-divergent | summary: add foo.txt | o changeset: 0:a24ed8ad918c user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: add r0 $ hg evolve --list -r . 75254fb3164b: add foo.txt content-divergent: 5421a7efcc6e (draft) (precursor cc71ffbc7c00) $ hg log -r 6189a9adfff0+5421a7efcc6e+75254fb3164b --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 5 6189a9adfff0 1969-12-31 23:59 -0000: date-changed using amend as 8:75254fb3164b 7 5421a7efcc6e 1970-01-01 00:03 +0000: 8 75254fb3164b 1970-01-01 00:13 +0000: $ hg evolve --content-divergent merge:[7] add foo.txt with: [8] add foo.txt base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 10c950c7c11f $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' 9 10c950c7c11f 1970-01-01 00:13 +0000: $ cd ..