diff --git a/tests/test-issue6528.t b/tests/test-issue6528.t new file mode 100644 --- /dev/null +++ b/tests/test-issue6528.t @@ -0,0 +1,171 @@ +=============================================================== +Test non-regression on the corruption associated with issue6528 +=============================================================== + +Setup +----- + + $ hg init base-repo + $ cd base-repo + + $ cat < a.txt + > 1 + > 1 + > 2 + > 3 + > 4 + > 5 + > 6 + > EOF + + $ hg add a.txt + $ hg commit -m 'c_base_c - create a.txt' + +Modify a.txt + + $ sed -i -e 's/1/wow/' a.txt + $ hg commit -qm 'c_modify_c - modify a.txt' + +Modify and rename a.txt to b.txt + + $ hg up -qr "desc('c_base_c')" + $ sed -i -e 's/6/wow/' a.txt + $ hg mv a.txt b.txt + $ hg commit -m 'c_rename_c - rename and modify a.txt to b.txt' + created new head + +Merge each branch + + $ hg merge -r "desc('c_modify_c')" + merging b.txt and a.txt to b.txt + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg resolve --mark b.txt + (no more unresolved files) + + + $ hg commit -m 'c_merge_c: commit merge' + + $ hg debugrevlogindex b.txt + rev linkrev nodeid p1 p2 + 0 2 b2f69c4a7960 000000000000 000000000000 + 1 3 df317307a6a4 000000000000 b2f69c4a7960 + +Check commit Graph + + $ hg log -G + @ changeset: 3:9a43fb7d5bfc + |\ tag: tip + | | parent: 2:b573f4ca0f80 + | | parent: 1:5846047e2473 + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_merge_c: commit merge + | | + | o changeset: 2:b573f4ca0f80 + | | parent: 0:1859a1bc1dc4 + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_rename_c - rename and modify a.txt to b.txt + | | + o | changeset: 1:5846047e2473 + |/ user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_modify_c - modify a.txt + | + o changeset: 0:1859a1bc1dc4 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: c_base_c - create a.txt + + + $ hg cat -r . b.txt + wow + wow + 2 + 3 + 4 + 5 + wow + $ cat b.txt + wow + wow + 2 + 3 + 4 + 5 + wow + $ cd .. + + +Check the lack of corruption +---------------------------- + + $ hg clone --pull -q base-repo cloned + $ cd cloned + $ hg up -r "desc('c_merge_c')" + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + + +Status is buggy, even with debugrebuilddirstate + + $ hg cat -r . b.txt + wow + wow + 2 + 3 + 4 + 5 + wow + $ cat b.txt + wow + wow + 2 + 3 + 4 + 5 + wow + $ hg status + M b.txt (known-bad-output !) + $ hg debugrebuilddirstate + $ hg status + M b.txt (known-bad-output !) + +the history was altered + +in theory p1/p2 order does not matter but in practice p1 == nullid is used as a +marker that some metadata are present and should be fetched. + + $ hg debugrevlogindex b.txt + rev linkrev nodeid p1 p2 + 0 2 b2f69c4a7960 000000000000 000000000000 + 1 3 df317307a6a4 b2f69c4a7960 000000000000 (known-bad-output !) + 1 3 df317307a6a4 000000000000 b2f69c4a7960 (missing-correct-output !) + +Check commit Graph + + $ hg log -G + @ changeset: 3:9a43fb7d5bfc + |\ tag: tip + | | parent: 2:b573f4ca0f80 + | | parent: 1:5846047e2473 + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_merge_c: commit merge + | | + | o changeset: 2:b573f4ca0f80 + | | parent: 0:1859a1bc1dc4 + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_rename_c - rename and modify a.txt to b.txt + | | + o | changeset: 1:5846047e2473 + |/ user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_modify_c - modify a.txt + | + o changeset: 0:1859a1bc1dc4 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: c_base_c - create a.txt +