##// END OF EJS Templates
rhg: fix bugs around [use-dirstate-tracked-hint] and repo auto-upgrade...
rhg: fix bugs around [use-dirstate-tracked-hint] and repo auto-upgrade This makes two changes: - make rhg support the [dirstate-tracked-key-v1] requirement. I believe rhg never changes the tracked file set, so it's OK that it doesn't have any logic for writing this file. - fix the name of [format.use-dirstate-v2.automatic-upgrade-of-mismatching-repositories] config option in rhg, which makes rhg actually honor the auto-upgrade. These two issues cancelled each other out in tests (auto-upgrade was happening because [dirstate-tracked-key-v1] forced the fallback, not because of the config), which is I think why they went unnoticed earlier.

File last commit:

r50395:3a538710 stable
r50395:3a538710 stable
Show More
test-status-tracked-key.t
243 lines | 5.8 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
Arseniy Alekseyev
rhg: fix bugs around [use-dirstate-tracked-hint] and repo auto-upgrade...
r50395 rhg supports this feature
$ hg status -R auto-upgrade \
> --config format.use-dirstate-tracked-hint=yes --config rhg.on-unsupported=abort
auto-upgrade: introduce a way to auto-upgrade to/from tracked-hint...
r50089 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