====================================================== Test operation on repository with an inlined changelog ====================================================== Inlined revlog has been a bag of complexity for a long time and the combination with special transaction logic on the changelog was a long source of bugs poorly covered by the test suites. We stopped doing any usage of inlined-revlog for changelog in a93e52f0b6ff, upgrading legacy inlined version as soon as possible when we see them. However this Mercurial does not produce such inlined-changelog that case is very poorly covered in the test suites. This test file aims at covering these cases. Double checking test data ========================= We should have a repository around $ mkdir sanity-check $ cd sanity-check $ tar xf $TESTDIR/bundles/inlined-changelog.tar $ cd inlined-changelog $ hg root $TESTTMP/sanity-check/inlined-changelog The repository should not be corrupted initially $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files checking dirstate checked 1 changesets with 1 changes to 1 files The changelog of that repository MUST be inlined $ hg debugrevlog -c | grep -E '^flags\b' flags : inline Touching that repository MUST split that inlined changelog $ hg branch foo --quiet $ hg commit -m foo --quiet $ hg debugrevlog -c | grep -E '^flags\b' flags : (none) $ cd ../.. Test doing a simple commit ========================== Simple commit ------------- $ mkdir simple-commit $ cd simple-commit $ tar xf $TESTDIR/bundles/inlined-changelog.tar $ cd inlined-changelog $ hg up --quiet $ hg log -GT '[{rev}] {desc}\n' @ [0] first commit $ echo b > b $ hg add b $ hg commit -m "second changeset" $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files checking dirstate checked 2 changesets with 2 changes to 2 files $ hg log -GT '[{rev}] {desc}\n' @ [1] second changeset | o [0] first commit $ cd ../.. Simple commit with a pretxn hook configured ------------------------------------------- Before 6.7.3 this used to delete the changelog index $ mkdir pretxnclose-commit $ cd pretxnclose-commit $ tar xf $TESTDIR/bundles/inlined-changelog.tar $ cat >> inlined-changelog/.hg/hgrc < [hooks] > pretxnclose=hg log -r tip -T "pre-txn tip rev: {rev}\n" > EOF $ cd inlined-changelog $ hg up --quiet $ hg log -GT '[{rev}] {desc}\n' @ [0] first commit $ echo b > b $ hg add b $ hg commit -m "second changeset" pre-txn tip rev: 1 (missing-correct-output !) warning: ignoring unknown working parent 11b63e930bf2! (known-bad-output !) pre-txn tip rev: 0 (known-bad-output !) $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files checking dirstate checked 2 changesets with 2 changes to 2 files $ hg log -GT '[{rev}] {desc}\n' @ [1] second changeset | o [0] first commit $ cd ../.. Test pushing to a repository with a repository revlog ===================================================== Simple local push ----------------- $ mkdir simple-local-push $ cd simple-local-push $ tar xf $TESTDIR/bundles/inlined-changelog.tar $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [0] first commit $ hg clone --pull inlined-changelog client requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets 827f11bfd362 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd client $ echo b > b $ hg add b $ hg commit -m "second changeset" $ hg push pushing to $TESTTMP/*/inlined-changelog (glob) searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files $ cd .. $ hg verify -R inlined-changelog checking changesets checking manifests crosschecking files in changesets and manifests checking files checking dirstate checked 2 changesets with 2 changes to 2 files $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [1] second changeset [0] first commit $ cd .. Simple local push with a pretxnchangegroup hook ----------------------------------------------- Before 6.7.3 this used to delete the server changelog $ mkdir pretxnchangegroup-local-push $ cd pretxnchangegroup-local-push $ tar xf $TESTDIR/bundles/inlined-changelog.tar $ cat >> inlined-changelog/.hg/hgrc < [hooks] > pretxnchangegroup=hg log -r tip -T "pre-txn tip rev: {rev}\n" > EOF $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [0] first commit $ hg clone --pull inlined-changelog client requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets 827f11bfd362 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd client $ echo b > b $ hg add b $ hg commit -m "second changeset" $ hg push pushing to $TESTTMP/*/inlined-changelog (glob) searching for changes adding changesets adding manifests adding file changes pre-txn tip rev: 1 (missing-correct-output !) pre-txn tip rev: 0 (known-bad-output !) added 1 changesets with 1 changes to 1 files $ cd .. $ hg verify -R inlined-changelog checking changesets checking manifests crosschecking files in changesets and manifests checking files checking dirstate checked 2 changesets with 2 changes to 2 files $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [1] second changeset [0] first commit $ cd .. Simple ssh push ----------------- $ mkdir simple-ssh-push $ cd simple-ssh-push $ tar xf $TESTDIR/bundles/inlined-changelog.tar $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [0] first commit $ hg clone ssh://user@dummy/"`pwd`"/inlined-changelog client requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets 827f11bfd362 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd client $ echo b > b $ hg add b $ hg commit -m "second changeset" $ hg push pushing to ssh://user@dummy/$TESTTMP/simple-ssh-push/inlined-changelog searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files $ cd .. $ hg verify -R inlined-changelog checking changesets checking manifests crosschecking files in changesets and manifests checking files checking dirstate checked 2 changesets with 2 changes to 2 files $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [1] second changeset [0] first commit $ cd .. Simple ssh push with a pretxnchangegroup hook ----------------------------------------------- Before 6.7.3 this used to delete the server changelog $ mkdir pretxnchangegroup-ssh-push $ cd pretxnchangegroup-ssh-push $ tar xf $TESTDIR/bundles/inlined-changelog.tar $ cat >> inlined-changelog/.hg/hgrc < [hooks] > pretxnchangegroup=hg log -r tip -T "pre-txn tip rev: {rev}\n" > EOF $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [0] first commit $ hg clone ssh://user@dummy/"`pwd`"/inlined-changelog client requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets 827f11bfd362 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd client $ echo b > b $ hg add b $ hg commit -m "second changeset" $ hg push pushing to ssh://user@dummy/$TESTTMP/pretxnchangegroup-ssh-push/inlined-changelog searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: pre-txn tip rev: 1 (missing-correct-output !) remote: pre-txn tip rev: 0 (known-bad-output !) remote: added 1 changesets with 1 changes to 1 files $ cd .. $ hg verify -R inlined-changelog checking changesets checking manifests crosschecking files in changesets and manifests checking files checking dirstate checked 2 changesets with 2 changes to 2 files $ hg log -R inlined-changelog -T '[{rev}] {desc}\n' [1] second changeset [0] first commit $ cd ..