##// END OF EJS Templates
bisect: avoid adding irrelevant revisions to bisect state...
bisect: avoid adding irrelevant revisions to bisect state When adding new revisions to the bisect state, it only makes sense to add information about revisions that are under consideration (i.e., those that are topologically between the known good and bad revisions). However, if the user passes in a revset (e.g., '!merge()' to exclude merge commits), hg will resolve the revset first and add all matching revisions to the bisect state (which in this case would likely be the majority of revisions in the repo). To avoid this, revisions should only be added to the bisect state if they are between the good and bad revisions (and therefore relevant to the bisection). -- Here are the results of some performance tests using the `mozilla-central` repo (since it is one of the largest freely-available hg repositories in the wild). These tests compare the performance of a locally-built `hg` before and after application of this series. Note that `--noupdate` is passed to avoid including update time (which should not vary across cases). Setup (run between each test): $ hg bisect --reset $ hg bisect --noupdate --bad 56c3ad4bde5c70714b784ccf15d099e0df0f5bde $ hg bisect --noupdate --good 57426696adaf08298af3027fa77486fee0633b13 Test using a revset that returns a very large number of revisions: $ time hg bisect --noupdate --skip '!merge()' > /dev/null Before: real 0m9.398s user 0m9.233s sys 0m0.120s After: real 0m1.513s user 0m1.425s sys 0m0.052s Test using a revset that is expensive to compute: $ time hg bisect --noupdate --skip 'desc("Bug")' > /dev/null Before: real 0m49.853s user 0m49.580s sys 0m0.243s After: real 0m4.120s user 0m4.036s sys 0m0.048s

File last commit:

r50089:e4b31016 default
r50337:81623652 default
Show More
test-status-tracked-key.t
238 lines | 5.7 KiB | text/troff | Tads3Lexer
/ tests / test-status-tracked-key.t
tracked-key: remove the dual write and rename to tracked-hint...
r49644 ===============================
Test the "tracked hint" feature
===============================
dirstate: introduce a "tracked-key" feature...
r49533
tracked-key: remove the dual write and rename to tracked-hint...
r49644 The tracked hint feature provide a file that get updated when the set of tracked
dirstate: introduce a "tracked-key" feature...
r49533 files get updated.
basic setup
$ cat << EOF >> $HGRCPATH
> [format]
tracked-key: remove the dual write and rename to tracked-hint...
r49644 > use-dirstate-tracked-hint=yes
dirstate: introduce a "tracked-key" feature...
r49533 > EOF
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ hg init tracked-hint-test
$ cd tracked-hint-test
dirstate: introduce a "tracked-key" feature...
r49533 $ hg debugbuilddag '.+10' -n
$ hg log -G -T '{rev} {desc} {files}\n'
o 10 r10 nf10
|
o 9 r9 nf9
|
o 8 r8 nf8
|
o 7 r7 nf7
|
o 6 r6 nf6
|
o 5 r5 nf5
|
o 4 r4 nf4
|
o 3 r3 nf3
|
o 2 r2 nf2
|
o 1 r1 nf1
|
o 0 r0 nf0
$ hg up tip
11 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg files
nf0
nf1
nf10
nf2
nf3
nf4
nf5
nf6
nf7
nf8
nf9
key-file exists
-----------
tracked-key: remove the dual write and rename to tracked-hint...
r49644 The tracked hint file should exist
dirstate: introduce a "tracked-key" feature...
r49533
$ ls -1 .hg/dirstate*
.hg/dirstate
tracked-key: remove the dual write and rename to tracked-hint...
r49644 .hg/dirstate-tracked-hint
dirstate: introduce a "tracked-key" feature...
r49533
key-file stay the same if the tracked set is unchanged
------------------------------------------------------
(copy its content for later comparison)
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ echo foo >> nf0
$ sleep 1
$ hg status
M nf0
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ hg revert -C nf0
$ sleep 1
$ hg status
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533
key-file change if the tracked set is changed manually
------------------------------------------------------
adding a file to tracking
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ echo x > x
$ hg add x
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
Files .hg/dirstate-tracked-hint and ../key-bck differ
dirstate: introduce a "tracked-key" feature...
r49533 [1]
remove a file from tracking
(forget)
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ hg forget x
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
Files .hg/dirstate-tracked-hint and ../key-bck differ
dirstate: introduce a "tracked-key" feature...
r49533 [1]
(remove)
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ hg remove nf1
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
Files .hg/dirstate-tracked-hint and ../key-bck differ
dirstate: introduce a "tracked-key" feature...
r49533 [1]
key-file changes on revert (when applicable)
--------------------------------------------
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ hg status
R nf1
? x
$ hg revert --all
undeleting nf1
$ hg status
? x
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
Files .hg/dirstate-tracked-hint and ../key-bck differ
dirstate: introduce a "tracked-key" feature...
r49533 [1]
`hg update` does affect the key-file (when needed)
--------------------------------------------------
update changing the tracked set
(removing)
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ hg status --rev . --rev '.#generations[-1]'
R nf10
$ hg up '.#generations[-1]'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
Files .hg/dirstate-tracked-hint and ../key-bck differ
dirstate: introduce a "tracked-key" feature...
r49533 [1]
(adding)
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ hg status --rev . --rev '.#generations[1]'
A nf10
$ hg up '.#generations[1]'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
Files .hg/dirstate-tracked-hint and ../key-bck differ
dirstate: introduce a "tracked-key" feature...
r49533 [1]
update not affecting the tracked set
$ echo foo >> nf0
$ hg commit -m foo
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ cp .hg/dirstate-tracked-hint ../key-bck
dirstate: introduce a "tracked-key" feature...
r49533 $ hg status --rev . --rev '.#generations[-1]'
M nf0
$ hg up '.#generations[-1]'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ diff --brief .hg/dirstate-tracked-hint ../key-bck
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641
Test upgrade and downgrade
==========================
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ ls .hg/dirstate-tracked-hint
.hg/dirstate-tracked-hint
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641 $ hg debugrequires | grep 'tracked'
tracked-key: update the requirement value...
r49642 dirstate-tracked-key-v1
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641
downgrade
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ hg debugupgraderepo --config format.use-dirstate-tracked-hint=no --run --quiet
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641 upgrade will perform the following actions:
requirements
preserved: * (glob)
tracked-key: update the requirement value...
r49642 removed: dirstate-tracked-key-v1
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641
no revlogs to process
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ ls -1 .hg/dirstate-tracked-hint
Raphaël Gomès
windows: generalize output for test-status-tracked-key.t...
r49656 ls: *.hg/dirstate-tracked-hint*: $ENOENT$ (glob)
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641 [2]
$ hg debugrequires | grep 'tracked'
[1]
upgrade
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ hg debugupgraderepo --config format.use-dirstate-tracked-hint=yes --run --quiet
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641 upgrade will perform the following actions:
requirements
preserved: * (glob)
tracked-key: update the requirement value...
r49642 added: dirstate-tracked-key-v1
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641
no revlogs to process
tracked-key: remove the dual write and rename to tracked-hint...
r49644 $ ls -1 .hg/dirstate-tracked-hint
.hg/dirstate-tracked-hint
tracked-key: make it possible to upgrade to and downgrade from the feature...
r49641 $ hg debugrequires | grep 'tracked'
tracked-key: update the requirement value...
r49642 dirstate-tracked-key-v1
auto-upgrade: introduce a way to auto-upgrade to/from tracked-hint...
r50089 $ cd ..
Test automatic upgrade and downgrade
------------------------------------
create an initial repository
$ hg init auto-upgrade \
> --config format.use-dirstate-tracked-hint=no
$ hg debugbuilddag -R auto-upgrade --new-file .+5
$ hg -R auto-upgrade update
6 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg debugformat -R auto-upgrade | grep tracked
tracked-hint: no
upgrade it to dirstate-tracked-hint automatically
$ hg status -R auto-upgrade \
> --config format.use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories=yes \
> --config format.use-dirstate-tracked-hint=yes
automatically upgrading repository to the `tracked-hint` feature
(see `hg help config.format.use-dirstate-tracked-hint` for details)
$ hg debugformat -R auto-upgrade | grep tracked
tracked-hint: yes
downgrade it from dirstate-tracked-hint automatically
$ hg status -R auto-upgrade \
> --config format.use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories=yes \
> --config format.use-dirstate-tracked-hint=no
automatically downgrading repository from the `tracked-hint` feature
(see `hg help config.format.use-dirstate-tracked-hint` for details)
$ hg debugformat -R auto-upgrade | grep tracked
tracked-hint: no