Mercurial > hg
view tests/test-mq-qpush-fail.t @ 24226:b992769dd1be
manifest: use custom C implementation of lazymanifest
This version is actually lazy, unlike the pure-python version. The
latter could stand to be optimized if anyone actually wants to use it
seriously. I put no work into it.
Before any of my related changes on mozilla-central:
perfmanifest tip
! wall 0.268805 comb 0.260000 user 0.260000 sys 0.000000 (best of 37)
perftags
! result: 162
! wall 0.007099 comb 0.000000 user 0.000000 sys 0.000000 (best of 401)
perfstatus
! wall 0.415680 comb 0.420000 user 0.260000 sys 0.160000 (best of 24)
hgperf export tip
! wall 0.142118 comb 0.140000 user 0.140000 sys 0.000000 (best of 67)
after all of my changes on mozilla-central:
./hg:
perfmanifest tip
! wall 0.232640 comb 0.230000 user 0.220000 sys 0.010000 (best of 43)
perftags
! result: 162
! wall 0.007057 comb 0.010000 user 0.000000 sys 0.010000 (best of 395)
perfstatus
! wall 0.415503 comb 0.420000 user 0.280000 sys 0.140000 (best of 24)
hgperf export tip
! wall 0.025096 comb 0.030000 user 0.030000 sys 0.000000 (best of 102)
so it's no real change in performance on perf{manifest,tags,status},
but is a huge win on 'hgperf export tip'.
There's a little performance work that could still be done here:
fastdelta() could be done significantly more intelligently by using
the internal state of the lazymanifest type in C, but that seems like
good future work.
author | Augie Fackler <augie@google.com> |
---|---|
date | Fri, 06 Mar 2015 21:29:47 -0500 |
parents | a387b0390082 |
children | f1eaf03dd608 |
line wrap: on
line source
Test that qpush cleans things up if it doesn't complete $ echo "[extensions]" >> $HGRCPATH $ echo "mq=" >> $HGRCPATH $ hg init repo $ cd repo $ echo foo > foo $ hg ci -Am 'add foo' adding foo $ touch untracked-file $ echo 'syntax: glob' > .hgignore $ echo '.hgignore' >> .hgignore $ hg qinit test qpush on empty series $ hg qpush no patches in series $ hg qnew patch1 $ echo >> foo $ hg qrefresh -m 'patch 1' $ hg qnew patch2 $ echo bar > bar $ hg add bar $ hg qrefresh -m 'patch 2' $ hg qnew --config 'mq.plain=true' -U bad-patch $ echo >> foo $ hg qrefresh $ hg qpop -a popping bad-patch popping patch2 popping patch1 patch queue now empty $ $PYTHON -c 'print "\xe9"' > message $ cat .hg/patches/bad-patch >> message $ mv message .hg/patches/bad-patch $ hg qpush -a && echo 'qpush succeeded?!' applying patch1 applying patch2 applying bad-patch transaction abort! rollback completed cleaning up working directory...done abort: decoding near '\xe9': 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)! (esc) [255] $ hg parents changeset: 0:bbd179dfa0a7 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: add foo test corrupt status file $ hg qpush applying patch1 now at: patch1 $ cp .hg/patches/status .hg/patches/status.orig $ hg qpop popping patch1 patch queue now empty $ cp .hg/patches/status.orig .hg/patches/status $ hg qpush abort: working directory revision is not qtip [255] $ rm .hg/patches/status .hg/patches/status.orig bar should be gone; other unknown/ignored files should still be around $ hg status -A ? untracked-file I .hgignore C foo preparing qpush of a missing patch $ hg qpop -a no patches applied $ hg qpush applying patch1 now at: patch1 $ rm .hg/patches/patch2 now we expect the push to fail, but it should NOT complain about patch1 $ hg qpush applying patch2 unable to read patch2 now at: patch1 [1] preparing qpush of missing patch with no patch applied $ hg qpop -a popping patch1 patch queue now empty $ rm .hg/patches/patch1 qpush should fail the same way as below $ hg qpush applying patch1 unable to read patch1 [1] Test qpush to a patch below the currently applied patch. $ hg qq -c guardedseriesorder $ hg qnew a $ hg qguard +block $ hg qnew b $ hg qnew c $ hg qpop -a popping c popping b popping a patch queue now empty try to push and pop while a is guarded $ hg qpush a cannot push 'a' - guarded by '+block' [1] $ hg qpush -a applying b patch b is empty applying c patch c is empty now at: c now try it when a is unguarded, and we're at the top of the queue $ hg qapplied -v 0 G a 1 A b 2 A c $ hg qsel block $ hg qpush b abort: cannot push to a previous patch: b [255] $ hg qpush a abort: cannot push to a previous patch: a [255] and now we try it one more time with a unguarded, while we're not at the top of the queue $ hg qpop b popping c now at: b $ hg qpush a abort: cannot push to a previous patch: a [255] test qpop --force and backup files $ hg qpop -a popping b patch queue now empty $ hg qq --create force $ echo a > a $ echo b > b $ echo c > c $ hg ci -Am add a b c $ echo a >> a $ hg rm b $ hg rm c $ hg qnew p1 $ echo a >> a $ echo bb > b $ hg add b $ echo cc > c $ hg add c $ hg qpop --force --verbose saving current version of a as a.orig saving current version of b as b.orig saving current version of c as c.orig popping p1 patch queue now empty $ hg st ? a.orig ? b.orig ? c.orig ? untracked-file $ cat a.orig a a a $ cat b.orig bb $ cat c.orig cc test qpop --force --no-backup $ hg qpush applying p1 now at: p1 $ rm a.orig $ echo a >> a $ hg qpop --force --no-backup --verbose popping p1 patch queue now empty $ test -f a.orig && echo 'error: backup with --no-backup' [1] test qpop --keep-changes $ hg qpush applying p1 now at: p1 $ hg qpop --keep-changes --force abort: cannot use both --force and --keep-changes [255] $ echo a >> a $ hg qpop --keep-changes abort: local changes found, refresh first [255] $ hg revert -qa a $ rm a $ hg qpop --keep-changes abort: local changes found, refresh first [255] $ hg rm -A a $ hg qpop --keep-changes abort: local changes found, refresh first [255] $ hg revert -qa a $ echo b > b $ hg add b $ hg qpop --keep-changes abort: local changes found, refresh first [255] $ hg forget b $ echo d > d $ hg add d $ hg qpop --keep-changes popping p1 patch queue now empty $ hg forget d $ rm d test qpush --force and backup files $ echo a >> a $ hg qnew p2 $ echo b >> b $ echo d > d $ echo e > e $ hg add d e $ hg rm c $ hg qnew p3 $ hg qpop -a popping p3 popping p2 patch queue now empty $ echo a >> a $ echo b1 >> b $ echo d1 > d $ hg add d $ echo e1 > e $ hg qpush -a --force --verbose applying p2 saving current version of a as a.orig patching file a committing files: a committing manifest committing changelog applying p3 saving current version of b as b.orig saving current version of d as d.orig patching file b patching file c patching file d file d already exists 1 out of 1 hunks FAILED -- saving rejects to file d.rej patching file e file e already exists 1 out of 1 hunks FAILED -- saving rejects to file e.rej patch failed to apply committing files: b committing manifest committing changelog patch failed, rejects left in working dir errors during apply, please fix and refresh p3 [2] $ cat a.orig a a $ cat b.orig b b1 $ cat d.orig d1 test qpush --force --no-backup $ hg revert -qa $ hg qpop -a popping p3 popping p2 patch queue now empty $ echo a >> a $ rm a.orig $ hg qpush --force --no-backup --verbose applying p2 patching file a committing files: a committing manifest committing changelog now at: p2 $ test -f a.orig && echo 'error: backup with --no-backup' [1] test qgoto --force --no-backup $ hg qpop popping p2 patch queue now empty $ echo a >> a $ hg qgoto --force --no-backup p2 --verbose applying p2 patching file a committing files: a committing manifest committing changelog now at: p2 $ test -f a.orig && echo 'error: backup with --no-backup' [1] test qpush --keep-changes $ hg qpush --keep-changes --force abort: cannot use both --force and --keep-changes [255] $ hg qpush --keep-changes --exact abort: cannot use --exact and --keep-changes together [255] $ echo b >> b $ hg qpush --keep-changes applying p3 errors during apply, please fix and refresh p2 [2] $ rm b $ hg qpush --keep-changes applying p3 errors during apply, please fix and refresh p2 [2] $ hg rm -A b $ hg qpush --keep-changes applying p3 errors during apply, please fix and refresh p2 [2] $ hg revert -aq b $ echo d > d $ hg add d $ hg qpush --keep-changes applying p3 errors during apply, please fix and refresh p2 [2] $ hg forget d $ rm d $ hg qpop popping p2 patch queue now empty $ echo b >> b $ hg qpush -a --keep-changes applying p2 applying p3 errors during apply, please fix and refresh p2 [2] $ hg qtop p2 $ hg parents --template "{rev} {desc}\n" 2 imported patch p2 $ hg st b M b $ cat b b b test qgoto --keep-changes $ hg revert -aq b $ rm e $ hg qgoto --keep-changes --force p3 abort: cannot use both --force and --keep-changes [255] $ echo a >> a $ hg qgoto --keep-changes p3 applying p3 now at: p3 $ hg st a M a $ hg qgoto --keep-changes p2 popping p3 now at: p2 $ hg st a M a test mq.keepchanges setting $ hg --config mq.keepchanges=1 qpush applying p3 now at: p3 $ hg st a M a $ hg --config mq.keepchanges=1 qpop popping p3 now at: p2 $ hg st a M a $ hg --config mq.keepchanges=1 qgoto p3 applying p3 now at: p3 $ hg st a M a $ echo b >> b $ hg --config mq.keepchanges=1 qpop --force popping p3 now at: p2 $ hg st b $ hg --config mq.keepchanges=1 qpush --exact abort: local changes found, refresh first [255] $ hg revert -qa a $ hg qpop popping p2 patch queue now empty $ echo a >> a $ hg --config mq.keepchanges=1 qpush --force applying p2 now at: p2 $ hg st a $ cd ..