Mercurial > hg
comparison tests/test-progress.t @ 19619:4694ccd5d994
progress: stop getting stuck in a nested topic during a long inner step
Convert, for example, has loops like this:
for revision in source_repo:
progress(revisions)
for file in revision:
progresss(file)
Prior to this change, we would start showing the file-level progress
when we encountered a big revision, and then we'd get stuck in showing
file-progress instead of revision progress, often producing many many
instantly-completing progress bars rather than the actually-helpful
top-level revisions bar.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Fri, 23 Aug 2013 13:28:18 -0400 |
parents | 41e39a0299cb |
children | 51e5c793a9f4 |
comparison
equal
deleted
inserted
replaced
19618:6ac206fb6f27 | 19619:4694ccd5d994 |
---|---|
1 | 1 |
2 $ cat > loop.py <<EOF | 2 $ cat > loop.py <<EOF |
3 > from mercurial import commands | 3 > from mercurial import commands |
4 > import time | |
5 > class incrementingtime(object): | |
6 > def __init__(self): | |
7 > self._time = 0.0 | |
8 > def __call__(self): | |
9 > self._time += 0.25 | |
10 > return self._time | |
11 > time.time = incrementingtime() | |
4 > | 12 > |
5 > def loop(ui, loops, **opts): | 13 > def loop(ui, loops, **opts): |
6 > loops = int(loops) | 14 > loops = int(loops) |
7 > total = None | 15 > total = None |
8 > if loops >= 0: | 16 > if loops >= 0: |
17 > for i in range(loops): | 25 > for i in range(loops): |
18 > ui.progress('loop', i, 'loop.%d' % i, 'loopnum', total) | 26 > ui.progress('loop', i, 'loop.%d' % i, 'loopnum', total) |
19 > if opts.get('parallel'): | 27 > if opts.get('parallel'): |
20 > ui.progress('other', i, 'other.%d' % i, 'othernum', total) | 28 > ui.progress('other', i, 'other.%d' % i, 'othernum', total) |
21 > if nested: | 29 > if nested: |
22 > for j in range(2): | 30 > nested_steps = 2 |
23 > ui.progress('nested', j, 'nested.%d' % j, 'nestnum', 2) | 31 > if i and i % 4 == 0: |
24 > ui.progress('nested', None, 'nested.done', 'nestnum', 2) | 32 > nested_steps = 5 |
33 > for j in range(nested_steps): | |
34 > ui.progress( | |
35 > 'nested', j, 'nested.%d' % j, 'nestnum', nested_steps) | |
36 > ui.progress( | |
37 > 'nested', None, 'nested.done', 'nestnum', nested_steps) | |
25 > ui.progress('loop', None, 'loop.done', 'loopnum', total) | 38 > ui.progress('loop', None, 'loop.done', 'loopnum', total) |
26 > | 39 > |
27 > commands.norepo += " loop" | 40 > commands.norepo += " loop" |
28 > | 41 > |
29 > cmdtable = { | 42 > cmdtable = { |
65 $ hg -y loop 3 --nested | 78 $ hg -y loop 3 --nested |
66 \r (no-eol) (esc) | 79 \r (no-eol) (esc) |
67 loop [ ] 0/3\r (no-eol) (esc) | 80 loop [ ] 0/3\r (no-eol) (esc) |
68 loop [===============> ] 1/3\r (no-eol) (esc) | 81 loop [===============> ] 1/3\r (no-eol) (esc) |
69 loop [===============================> ] 2/3\r (no-eol) (esc) | 82 loop [===============================> ] 2/3\r (no-eol) (esc) |
83 \r (no-eol) (esc) | |
84 | |
85 Test nested long-lived topic which has the same name as a short-lived | |
86 peer. We shouldn't get stuck showing the short-lived inner steps, and | |
87 should go back to skipping the inner steps when the slow nested step | |
88 finishes. | |
89 | |
90 $ hg -y loop 7 --nested | |
91 \r (no-eol) (esc) | |
92 loop [ ] 0/7\r (no-eol) (esc) | |
93 loop [=====> ] 1/7\r (no-eol) (esc) | |
94 loop [============> ] 2/7\r (no-eol) (esc) | |
95 loop [===================> ] 3/7\r (no-eol) (esc) | |
96 loop [==========================> ] 4/7\r (no-eol) (esc) | |
97 nested [==========================> ] 3/5\r (no-eol) (esc) | |
98 nested [===================================> ] 4/5\r (no-eol) (esc) | |
99 loop [=================================> ] 5/7\r (no-eol) (esc) | |
100 loop [========================================> ] 6/7\r (no-eol) (esc) | |
70 \r (no-eol) (esc) | 101 \r (no-eol) (esc) |
71 | 102 |
72 | 103 |
73 $ hg --config progress.changedelay=0 -y loop 3 --nested | 104 $ hg --config progress.changedelay=0 -y loop 3 --nested |
74 \r (no-eol) (esc) | 105 \r (no-eol) (esc) |