corruption: add a test for issue6528
The initial reproduction script was provided by Charles Chamberlain from Jane
Street.
Differential Revision: https://phab.mercurial-scm.org/D10996
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-issue6528.t Tue Jul 06 19:22:50 2021 +0200
@@ -0,0 +1,171 @@
+===============================================================
+Test non-regression on the corruption associated with issue6528
+===============================================================
+
+Setup
+-----
+
+ $ hg init base-repo
+ $ cd base-repo
+
+ $ cat <<EOF > a.txt
+ > 1
+ > 2
+ > 3
+ > 4
+ > 5
+ > 6
+ > EOF
+
+ $ hg add a.txt
+ $ hg commit -m 'c_base_c - create a.txt'
+
+Modify a.txt
+
+ $ sed -e 's/1/foo/' a.txt > a.tmp; mv a.tmp a.txt
+ $ hg commit -m 'c_modify_c - modify a.txt'
+
+Modify and rename a.txt to b.txt
+
+ $ hg up -r "desc('c_base_c')"
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ sed -e 's/6/bar/' a.txt > a.tmp; mv a.tmp 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 commit -m 'c_merge_c: commit merge'
+
+ $ hg debugrevlogindex b.txt
+ rev linkrev nodeid p1 p2
+ 0 2 05b806ebe5ea 000000000000 000000000000
+ 1 3 a58b36ad6b65 000000000000 05b806ebe5ea
+
+Check commit Graph
+
+ $ hg log -G
+ @ changeset: 3:a1cc2bdca0aa
+ |\ tag: tip
+ | | parent: 2:615c6ccefd15
+ | | parent: 1:373d507f4667
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: c_merge_c: commit merge
+ | |
+ | o changeset: 2:615c6ccefd15
+ | | parent: 0:f5a5a568022f
+ | | 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:373d507f4667
+ |/ user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_modify_c - modify a.txt
+ |
+ o changeset: 0:f5a5a568022f
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_base_c - create a.txt
+
+
+ $ hg cat -r . b.txt
+ foo
+ 2
+ 3
+ 4
+ 5
+ bar
+ $ cat b.txt
+ foo
+ 2
+ 3
+ 4
+ 5
+ bar
+ $ cd ..
+
+
+Check the lack of corruption
+----------------------------
+
+ $ hg clone --pull base-repo cloned
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 4 changesets with 4 changes to 2 files
+ new changesets f5a5a568022f:a1cc2bdca0aa
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ 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
+ foo
+ 2
+ 3
+ 4
+ 5
+ bar
+ $ cat b.txt
+ foo
+ 2
+ 3
+ 4
+ 5
+ bar
+ $ 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 05b806ebe5ea 000000000000 000000000000
+ 1 3 a58b36ad6b65 05b806ebe5ea 000000000000 (known-bad-output !)
+ 1 3 a58b36ad6b65 000000000000 05b806ebe5ea (missing-correct-output !)
+
+Check commit Graph
+
+ $ hg log -G
+ @ changeset: 3:a1cc2bdca0aa
+ |\ tag: tip
+ | | parent: 2:615c6ccefd15
+ | | parent: 1:373d507f4667
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: c_merge_c: commit merge
+ | |
+ | o changeset: 2:615c6ccefd15
+ | | parent: 0:f5a5a568022f
+ | | 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:373d507f4667
+ |/ user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c_modify_c - modify a.txt
+ |
+ o changeset: 0:f5a5a568022f
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c_base_c - create a.txt
+