|
|
============================================
|
|
|
Tests for the admin::chainsaw-update command
|
|
|
============================================
|
|
|
|
|
|
setup
|
|
|
=====
|
|
|
|
|
|
$ hg init src
|
|
|
$ cd src
|
|
|
$ 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
|
|
|
$ echo 1 > foo
|
|
|
$ 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
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
Actual tests
|
|
|
============
|
|
|
|
|
|
Initial cloning if needed
|
|
|
-------------------------
|
|
|
|
|
|
$ hg admin::chainsaw-update --dest repo --rev default --source ./src
|
|
|
no such directory: "repo"
|
|
|
creating repository at "repo"
|
|
|
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/repo' done
|
|
|
|
|
|
$ cd repo
|
|
|
$ 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
|
|
|
|
|
|
$ hg status -A
|
|
|
C foo
|
|
|
C root
|
|
|
$ 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]
|
|
|
|
|
|
$ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src
|
|
|
loaded repository at "."
|
|
|
had to break store lock
|
|
|
had to break working copy lock
|
|
|
recovering after interrupted transaction, if any
|
|
|
no interrupted transaction available
|
|
|
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
|
|
|
|
|
|
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
|
|
|
C root
|
|
|
|
|
|
$ echo 2 > ../src/foo
|
|
|
$ hg -R ../src commit -mB_1
|
|
|
$ hg admin::chainsaw-update --dest . --rev default --source ../src -q
|
|
|
no interrupted transaction available
|
|
|
$ 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
|
|
|
|
|
|
$ hg status -A
|
|
|
C foo
|
|
|
C root
|
|
|
$ 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
|
|
|
C root
|
|
|
|
|
|
$ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src -q
|
|
|
no interrupted transaction available
|
|
|
$ hg status --all
|
|
|
I bar
|
|
|
C .hgignore
|
|
|
C foo
|
|
|
C root
|
|
|
$ cat bar
|
|
|
ignored
|
|
|
|
|
|
$ hg admin::chainsaw-update --dest . --rev default --source ../src -q
|
|
|
no interrupted transaction available
|
|
|
$ hg status --all
|
|
|
C .hgignore
|
|
|
C foo
|
|
|
C root
|
|
|
$ test -f bar
|
|
|
[1]
|
|
|
|
|
|
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
|
|
|
|