Mercurial > hg
view tests/test-journal-exists.t @ 51505:c9ceb4f60256 stable 6.7
phases: avoid N² behavior in `advanceboundary`
We allowed duplicated entries in the deque, which each entry could potentially
insert all its ancestors. So advancing boundary for the full repository would
mean each revision would walk all its ancestors, resulting in O(N²) iteration.
For repository of any decent size, N² is quickly insane.
We introduce a simple set to avoid this and get back to reasonable performance.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 15 Mar 2024 01:31:57 +0100 |
parents | dcaa2df1f688 |
children |
line wrap: on
line source
$ hg init repo $ cd repo $ echo a > a $ hg ci -Am0 adding a $ hg -q clone . foo $ touch .hg/store/journal $ echo foo > a $ hg ci -Am0 abort: abandoned transaction found (run 'hg recover' to clean up transaction) [255] $ hg recover rolling back interrupted transaction (verify step skipped, run `hg verify` to check your repository content) recover, explicit verify $ touch .hg/store/journal $ hg ci -Am0 abort: abandoned transaction found (run 'hg recover' to clean up transaction) [255] $ hg recover --verify -q recover, no verify $ touch .hg/store/journal $ hg ci -Am0 abort: abandoned transaction found (run 'hg recover' to clean up transaction) [255] $ hg recover --no-verify rolling back interrupted transaction (verify step skipped, run `hg verify` to check your repository content) Check that zero-size journals are correctly aborted: #if unix-permissions no-root $ hg bundle -qa repo.hg $ chmod -w foo/.hg/store/00changelog.i $ hg -R foo unbundle repo.hg adding changesets transaction abort! rollback completed abort: $EACCES$: '$TESTTMP/repo/foo/.hg/store/.00changelog.i-*' (glob) [255] $ if test -f foo/.hg/store/journal; then echo 'journal exists :-('; fi #endif