##// END OF EJS Templates
branchcache: use update_disk to refresh 'served' and 'served.hidden'...
branchcache: use update_disk to refresh 'served' and 'served.hidden' The `update_disk` method is dedicated to this kind of usecase. Now that the writting patterns are more consistent, we can use it to warm these two important cache. I am dropping the first comment about "refreshing all the others" because it is false. If a branchmap already exist for "served", none of the subset will be updated.

File last commit:

r52326:d36a81d7 default
r52389:79a7616a default
Show More
test-chainsaw-update.t
255 lines | 6.5 KiB | text/troff | Tads3Lexer
/ tests / test-chainsaw-update.t
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 ============================================
Tests for the admin::chainsaw-update command
============================================
setup
=====
$ cat >> $HGRCPATH << EOF
> [extensions]
> chainsaw=
> EOF
$ hg init src
$ cd src
chainsaw-update: use a graph with branching in graph...
r52325 $ echo 1 > root
$ hg add root
$ hg ci -Am R_0
$ hg branch A
marked working directory as branch A
(branches are permanent and global, did you want a bookmark?)
$ echo 42 > bar
$ hg add bar
$ hg ci -Am A_0
$ echo 1337 > bar
$ hg ci -Am A_1
$ hg update 'desc(R_0)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 $ echo 1 > foo
chainsaw-update: use a graph with branching in graph...
r52325 $ hg add foo
$ hg ci -Am B_0
$ hg log -G
@ changeset: 3:bfcb8e629987
| tag: tip
| parent: 0:06f48e4098b8
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: B_0
|
| o changeset: 2:7fd8de258aa4
| | branch: A
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: A_1
| |
| o changeset: 1:ae1692b8aadb
|/ branch: A
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: A_0
|
o changeset: 0:06f48e4098b8
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: R_0
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 $ cd ..
Actual tests
============
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 Initial cloning if needed
-------------------------
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 $ hg admin::chainsaw-update --dest repo --rev default --source ./src
no such directory: "repo"
creating repository at "repo"
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 recovering after interrupted transaction, if any
no interrupted transaction available
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 pulling from ./src
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 updating to revision 'default'
chainsaw-update: use a graph with branching in graph...
r52325 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 chainsaw-update to revision 'default' for repository at '$TESTTMP/repo' done
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 $ cd repo
chainsaw-update: use a graph with branching in graph...
r52325 $ hg log -G
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 @ changeset: 3:bfcb8e629987
chainsaw-update: use a graph with branching in graph...
r52325 | tag: tip
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 | parent: 0:06f48e4098b8
chainsaw-update: use a graph with branching in graph...
r52325 | user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: B_0
|
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 | o changeset: 2:7fd8de258aa4
| | branch: A
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: A_1
| |
| o changeset: 1:ae1692b8aadb
|/ branch: A
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: A_0
|
chainsaw-update: use a graph with branching in graph...
r52325 o changeset: 0:06f48e4098b8
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: R_0
$ hg status -A
C foo
C root
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 $ cat foo
1
Test lock breacking capabilities
--------------------------------
Demonstrate lock-breaking capabilities with locks that regular Mercurial
operation would not break, because the hostnames registered in locks differ
from the current hostname (happens a lot with succesive containers):
$ ln -s invalid.host.test/effffffc:171814 .hg/store/lock
$ ln -s invalid.host.test/effffffc:171814 .hg/wlock
$ hg debuglock
lock: (.*?), process 171814, host invalid.host.test/effffffc \((\d+)s\) (re)
wlock: (.*?), process 171814, host invalid.host.test/effffffc \((\d+)s\) (re)
[2]
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 $ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src
loaded repository at "."
Georges Racinet
chainsaw-update: log actual locks breaking...
r52324 had to break store lock
had to break working copy lock
recovering after interrupted transaction, if any
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 no interrupted transaction available
Georges Racinet
chainsaw-update: log actual locks breaking...
r52324 pulling from ../src
updating to revision 'default'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
chainsaw-update to revision 'default' for repository at '$TESTTMP/repo' done
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322
Test file purging capabilities
------------------------------
Let's also add local modifications (tracked and untracked) to demonstrate the
purging.
$ echo untracked > bar
$ echo modified > foo
$ hg status -A
M foo
? bar
chainsaw-update: use a graph with branching in graph...
r52325 C root
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322
$ echo 2 > ../src/foo
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 $ hg -R ../src commit -mB_1
$ hg admin::chainsaw-update --dest . --rev default --source ../src -q
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 no interrupted transaction available
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 $ hg log -G
@ changeset: 4:973ab81c95fb
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: B_1
|
o changeset: 3:bfcb8e629987
| parent: 0:06f48e4098b8
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: B_0
|
| o changeset: 2:7fd8de258aa4
| | branch: A
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: A_1
| |
| o changeset: 1:ae1692b8aadb
|/ branch: A
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: A_0
|
o changeset: 0:06f48e4098b8
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: R_0
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 $ hg status -A
C foo
chainsaw-update: use a graph with branching in graph...
r52325 C root
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 $ cat foo
2
Now behaviour with respect to ignored files: they are not purged if
the --no-purge-ignored flag is passed, but they are purged by default
$ echo bar > .hgignore
$ hg ci -Aqm hgignore
$ echo ignored > bar
$ hg status --all
I bar
C .hgignore
C foo
chainsaw-update: use a graph with branching in graph...
r52325 C root
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 $ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src -q
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 no interrupted transaction available
$ hg status --all
I bar
C .hgignore
C foo
chainsaw-update: use a graph with branching in graph...
r52325 C root
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 $ cat bar
ignored
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 $ hg admin::chainsaw-update --dest . --rev default --source ../src -q
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 no interrupted transaction available
$ hg status --all
C .hgignore
C foo
chainsaw-update: use a graph with branching in graph...
r52325 C root
Georges Racinet
chainsaw: new extension for dangerous operations...
r52322 $ test -f bar
[1]
Georges Racinet
chainsaw-update: taking care of initial cloning...
r52326 test --minimal-initial-cloning variant
--------------------------------------
With `--minimal-initial-cloning`, there is no "requesting all changes"
message. Hence clone bundles would be bypassed (TODO test both cases
# with an actual clone-bundle)
$ cd ..
$ hg admin::chainsaw-update --dest repo2 --rev default --source src --initial-clone-minimal
no such directory: "repo2"
creating repository at "repo2"
recovering after interrupted transaction, if any
no interrupted transaction available
pulling from src
updating to revision 'default'
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
chainsaw-update to revision 'default' for repository at '$TESTTMP/repo2' done
$ cd repo2
$ hg log -G
@ changeset: 2:973ab81c95fb
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: B_1
|
o changeset: 1:bfcb8e629987
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: B_0
|
o changeset: 0:06f48e4098b8
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: R_0
$ hg status -A
C foo
C root
$ cat foo
2