##// END OF EJS Templates
tests: fix test-transaction-safety.t on Windows...
tests: fix test-transaction-safety.t on Windows Mostly this is about `C:\dir\sub` style paths being turned into `C:dirsub` by MSYS, and not being about to execute shell scripts in hooks directly. See also a12819559ccb::9e3979a25bfe. Differential Revision: https://phab.mercurial-scm.org/D10762

File last commit:

r48094:b1ce93dc default
r48094:b1ce93dc default
Show More
test-transaction-safety.t
269 lines | 5.4 KiB | text/troff | Tads3Lexer
/ tests / test-transaction-safety.t
revlog: add a new test file focussed on testing transactionally issue...
r48010 Test transaction safety
=======================
changelogv2: introduce a "changelogv2" feature...
r48037 #testcases revlogv1 revlogv2 changelogv2
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
$ cat << EOF >> $HGRCPATH
> [experimental]
> revlogv2=no
> EOF
#endif
#if revlogv2
$ cat << EOF >> $HGRCPATH
> [experimental]
> revlogv2=enable-unstable-format-and-corrupt-my-data
> EOF
#endif
changelogv2: introduce a "changelogv2" feature...
r48037 #if changelogv2
$ cat << EOF >> $HGRCPATH
> [format]
> exp-use-changelog-v2=enable-unstable-format-and-corrupt-my-data
> EOF
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 This test basic case to make sure external process do not see transaction
content until it is committed.
# TODO: also add an external reader accessing revlog files while they are written
# (instead of during transaction finalisation)
# TODO: also add stream clone and hardlink clone happening during these transaction.
setup
-----
synchronisation+output script:
$ mkdir sync
$ mkdir output
$ mkdir script
$ HG_TEST_FILE_EXT_WAITING=$TESTTMP/sync/ext_waiting
$ export HG_TEST_FILE_EXT_WAITING
$ HG_TEST_FILE_EXT_UNLOCK=$TESTTMP/sync/ext_unlock
$ export HG_TEST_FILE_EXT_UNLOCK
$ HG_TEST_FILE_EXT_DONE=$TESTTMP/sync/ext_done
$ export HG_TEST_FILE_EXT_DONE
$ cat << EOF > script/external.sh
> #!/bin/sh
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > "$RUNTESTDIR/testlib/wait-on-file" 5 "$HG_TEST_FILE_EXT_UNLOCK" "$HG_TEST_FILE_EXT_WAITING"
> hg log --rev 'tip' -T 'external: {rev} {desc}\n' > "$TESTTMP/output/external.out"
> touch "$HG_TEST_FILE_EXT_DONE"
revlog: add a new test file focussed on testing transactionally issue...
r48010 > EOF
$ cat << EOF > script/internal.sh
> #!/bin/sh
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > hg log --rev 'tip' -T 'internal: {rev} {desc}\n' > "$TESTTMP/output/internal.out"
> "$RUNTESTDIR/testlib/wait-on-file" 5 "$HG_TEST_FILE_EXT_DONE" "$HG_TEST_FILE_EXT_UNLOCK"
revlog: add a new test file focussed on testing transactionally issue...
r48010 > EOF
Automated commands:
$ make_one_commit() {
> rm -f $TESTTMP/sync/*
> rm -f $TESTTMP/output/*
> hg log --rev 'tip' -T 'pre-commit: {rev} {desc}\n'
> echo x >> a
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > sh $TESTTMP/script/external.sh & hg commit -m "$1"
revlog: add a new test file focussed on testing transactionally issue...
r48010 > cat $TESTTMP/output/external.out
> cat $TESTTMP/output/internal.out
> hg log --rev 'tip' -T 'post-tr: {rev} {desc}\n'
> }
$ make_one_pull() {
> rm -f $TESTTMP/sync/*
> rm -f $TESTTMP/output/*
> hg log --rev 'tip' -T 'pre-commit: {rev} {desc}\n'
> echo x >> a
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > sh $TESTTMP/script/external.sh & hg pull ../other-repo/ --rev "$1" --force --quiet
revlog: add a new test file focussed on testing transactionally issue...
r48010 > cat $TESTTMP/output/external.out
> cat $TESTTMP/output/internal.out
> hg log --rev 'tip' -T 'post-tr: {rev} {desc}\n'
> }
prepare a large source to which to pull from:
The source is large to unsure we don't use inline more after the pull
$ hg init other-repo
$ hg -R other-repo debugbuilddag .+500
prepare an empty repository where to make test:
$ hg init repo
$ cd repo
$ touch a
$ hg add a
prepare a small extension to controll inline size
$ mkdir $TESTTMP/ext
$ cat << EOF > $TESTTMP/ext/small_inline.py
> from mercurial import revlog
> revlog._maxinline = 64 * 100
> EOF
$ cat << EOF >> $HGRCPATH
> [extensions]
> small_inline=$TESTTMP/ext/small_inline.py
> [hooks]
Matt Harbison
tests: fix test-transaction-safety.t on Windows...
r48094 > pretxnclose = sh $TESTTMP/script/internal.sh
revlog: add a new test file focussed on testing transactionally issue...
r48010 > EOF
check this is true for the initial commit (inline → inline)
-----------------------------------------------------------
the repository should still be inline (for relevant format)
$ make_one_commit first
pre-commit: -1
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: -1
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 0 first
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 0 first
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
flags : inline
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 check this is true for extra commit (inline → inline)
-----------------------------------------------------
the repository should still be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
flags : inline
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_commit second
pre-commit: 0 first
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 0 first
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 1 second
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 1 second
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
flags : inline
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 check this is true for a small pull (inline → inline)
-----------------------------------------------------
the repository should still be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
flags : inline
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_pull 3
pre-commit: 1 second
warning: repository is unrelated
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 1 second
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 5 r3
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 5 r3
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
flags : inline
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 Make a large pull (inline → no-inline)
---------------------------------------
the repository should no longer be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
flags : inline
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_pull 400
pre-commit: 5 r3
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 5 r3
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 402 r400
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 402 r400
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
[1]
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 check this is true for extra commit (no-inline → no-inline)
-----------------------------------------------------------
the repository should no longer be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
[1]
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_commit third
pre-commit: 402 r400
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 402 r400
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 403 third
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 403 third
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
[1]
revlogv2: also test transactionality of revlog v2...
r48011 #endif
revlog: add a new test file focussed on testing transactionally issue...
r48010
Make a pull (not-inline → no-inline)
-------------------------------------
the repository should no longer be inline (for relevant format)
revlogv2: also test transactionality of revlog v2...
r48011 #if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
[1]
revlogv2: also test transactionality of revlog v2...
r48011
#endif
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ make_one_pull tip
pre-commit: 403 third
revlogv2: delay the update of the changelog docket to transaction end...
r48013 external: 403 third
revlogv2: track pending write in the docket and expose it to hooks...
r48015 internal: 503 r500
revlog: add a new test file focussed on testing transactionally issue...
r48010 post-tr: 503 r500
revlogv2: also test transactionality of revlog v2...
r48011
#if revlogv1
revlog: add a new test file focussed on testing transactionally issue...
r48010 $ hg debugrevlog -c | grep inline
[1]
revlogv2: also test transactionality of revlog v2...
r48011
#endif