test-share.t
445 lines
| 11.2 KiB
| text/troff
|
Tads3Lexer
/ tests / test-share.t
|
r12487 | $ echo "[extensions]" >> $HGRCPATH | ||
$ echo "share = " >> $HGRCPATH | ||||
prepare repo1 | ||||
$ hg init repo1 | ||||
$ cd repo1 | ||||
$ echo a > a | ||||
$ hg commit -A -m'init' | ||||
adding a | ||||
share it | ||||
$ cd .. | ||||
$ hg share repo1 repo2 | ||||
updating working directory | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
share shouldn't have a store dir | ||||
$ cd repo2 | ||||
$ test -d .hg/store | ||||
[1] | ||||
|
r33539 | share shouldn't have a cache dir, original repo should | ||
$ hg branches | ||||
default 0:d3873e73d99e | ||||
$ hg tags | ||||
tip 0:d3873e73d99e | ||||
$ test -d .hg/cache | ||||
[1] | ||||
$ ls -1 ../repo1/.hg/cache | ||||
branch2-served | ||||
|
r38803 | manifestfulltextcache | ||
|
r33539 | rbc-names-v1 | ||
rbc-revs-v1 | ||||
tags2-visible | ||||
|
r12487 | Some sed versions appends newline, some don't, and some just fails | ||
$ cat .hg/sharedpath; echo | ||||
|
r35394 | $TESTTMP/repo1/.hg | ||
|
r12487 | |||
|
r15101 | trailing newline on .hg/sharedpath is ok | ||
$ hg tip -q | ||||
0:d3873e73d99e | ||||
$ echo '' >> .hg/sharedpath | ||||
$ cat .hg/sharedpath | ||||
|
r35394 | $TESTTMP/repo1/.hg | ||
|
r15101 | $ hg tip -q | ||
0:d3873e73d99e | ||||
|
r12487 | commit in shared clone | ||
$ echo a >> a | ||||
$ hg commit -m'change in shared clone' | ||||
check original | ||||
$ cd ../repo1 | ||||
$ hg log | ||||
changeset: 1:8af4dc49db9e | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: change in shared clone | ||||
changeset: 0:d3873e73d99e | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: init | ||||
$ hg update | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cat a # should be two lines of "a" | ||||
a | ||||
a | ||||
commit in original | ||||
$ echo b > b | ||||
$ hg commit -A -m'another file' | ||||
adding b | ||||
check in shared clone | ||||
$ cd ../repo2 | ||||
$ hg log | ||||
changeset: 2:c2e0ac586386 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: another file | ||||
changeset: 1:8af4dc49db9e | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: change in shared clone | ||||
changeset: 0:d3873e73d99e | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: init | ||||
$ hg update | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cat b # should exist with one "b" | ||||
b | ||||
hg serve shared clone | ||||
$ hg serve -n test -p $HGPORT -d --pid-file=hg.pid | ||||
$ cat hg.pid >> $DAEMON_PIDS | ||||
|
r25472 | $ get-with-headers.py localhost:$HGPORT 'raw-file/' | ||
|
r12487 | 200 Script output follows | ||
-rw-r--r-- 4 a | ||||
-rw-r--r-- 2 b | ||||
|
r15080 | |||
test unshare command | ||||
$ hg unshare | ||||
$ test -d .hg/store | ||||
$ test -f .hg/sharedpath | ||||
[1] | ||||
|
r31211 | $ grep shared .hg/requires | ||
[1] | ||||
|
r15080 | $ hg unshare | ||
abort: this is not a shared repo | ||||
[255] | ||||
check that a change does not propagate | ||||
$ echo b >> b | ||||
$ hg commit -m'change in unshared' | ||||
$ cd ../repo1 | ||||
$ hg id -r tip | ||||
c2e0ac586386 tip | ||||
|
r16913 | |||
$ cd .. | ||||
|
r17539 | |||
|
r23548 | |||
|
r23614 | test sharing bookmarks | ||
|
r23548 | |||
|
r23614 | $ hg share -B repo1 repo3 | ||
|
r23548 | updating working directory | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd repo1 | ||||
$ hg bookmark bm1 | ||||
$ hg bookmarks | ||||
* bm1 2:c2e0ac586386 | ||||
$ cd ../repo2 | ||||
$ hg book bm2 | ||||
$ hg bookmarks | ||||
* bm2 3:0e6e70d1d5f1 | ||||
$ cd ../repo3 | ||||
$ hg bookmarks | ||||
bm1 2:c2e0ac586386 | ||||
$ hg book bm3 | ||||
$ hg bookmarks | ||||
bm1 2:c2e0ac586386 | ||||
* bm3 2:c2e0ac586386 | ||||
$ cd ../repo1 | ||||
$ hg bookmarks | ||||
* bm1 2:c2e0ac586386 | ||||
bm3 2:c2e0ac586386 | ||||
|
r31052 | check whether HG_PENDING makes pending changes only in relatd | ||
repositories visible to an external hook. | ||||
In "hg share" case, another transaction can't run in other | ||||
repositories sharing same source repository, because starting | ||||
transaction requires locking store of source repository. | ||||
Therefore, this test scenario ignores checking visibility of | ||||
.hg/bookmakrs.pending in repo2, which shares repo1 without bookmarks. | ||||
$ cat > $TESTTMP/checkbookmarks.sh <<EOF | ||||
> echo "@repo1" | ||||
|
r31767 | > hg -R "$TESTTMP/repo1" bookmarks | ||
|
r31052 | > echo "@repo2" | ||
|
r31767 | > hg -R "$TESTTMP/repo2" bookmarks | ||
|
r31052 | > echo "@repo3" | ||
|
r31767 | > hg -R "$TESTTMP/repo3" bookmarks | ||
|
r31052 | > exit 1 # to avoid adding new bookmark for subsequent tests | ||
> EOF | ||||
$ cd ../repo1 | ||||
$ hg --config hooks.pretxnclose="sh $TESTTMP/checkbookmarks.sh" -q book bmX | ||||
@repo1 | ||||
bm1 2:c2e0ac586386 | ||||
bm3 2:c2e0ac586386 | ||||
* bmX 2:c2e0ac586386 | ||||
@repo2 | ||||
* bm2 3:0e6e70d1d5f1 | ||||
@repo3 | ||||
bm1 2:c2e0ac586386 | ||||
* bm3 2:c2e0ac586386 | ||||
bmX 2:c2e0ac586386 | ||||
transaction abort! | ||||
rollback completed | ||||
abort: pretxnclose hook exited with status 1 | ||||
[255] | ||||
$ hg book bm1 | ||||
FYI, in contrast to above test, bmX is invisible in repo1 (= shared | ||||
src), because (1) HG_PENDING refers only repo3 and (2) | ||||
"bookmarks.pending" is written only into repo3. | ||||
$ cd ../repo3 | ||||
$ hg --config hooks.pretxnclose="sh $TESTTMP/checkbookmarks.sh" -q book bmX | ||||
@repo1 | ||||
* bm1 2:c2e0ac586386 | ||||
bm3 2:c2e0ac586386 | ||||
@repo2 | ||||
* bm2 3:0e6e70d1d5f1 | ||||
@repo3 | ||||
bm1 2:c2e0ac586386 | ||||
bm3 2:c2e0ac586386 | ||||
* bmX 2:c2e0ac586386 | ||||
transaction abort! | ||||
rollback completed | ||||
abort: pretxnclose hook exited with status 1 | ||||
[255] | ||||
$ hg book bm3 | ||||
$ cd ../repo1 | ||||
|
r23548 | test that commits work | ||
$ echo 'shared bookmarks' > a | ||||
$ hg commit -m 'testing shared bookmarks' | ||||
$ hg bookmarks | ||||
* bm1 3:b87954705719 | ||||
bm3 2:c2e0ac586386 | ||||
$ cd ../repo3 | ||||
$ hg bookmarks | ||||
bm1 3:b87954705719 | ||||
* bm3 2:c2e0ac586386 | ||||
$ echo 'more shared bookmarks' > a | ||||
$ hg commit -m 'testing shared bookmarks' | ||||
created new head | ||||
$ hg bookmarks | ||||
bm1 3:b87954705719 | ||||
* bm3 4:62f4ded848e4 | ||||
$ cd ../repo1 | ||||
$ hg bookmarks | ||||
* bm1 3:b87954705719 | ||||
bm3 4:62f4ded848e4 | ||||
$ cd .. | ||||
|
r31892 | non largefiles repos won't enable largefiles | ||
$ hg share --config extensions.largefiles= repo3 sharedrepo | ||||
|
r33209 | The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !) | ||
The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !) | ||||
|
r31892 | updating working directory | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ [ -f sharedrepo/.hg/hgrc ] | ||||
[1] | ||||
|
r23548 | test pushing bookmarks works | ||
$ hg clone repo3 repo4 | ||||
updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd repo4 | ||||
$ hg boo bm4 | ||||
$ echo foo > b | ||||
$ hg commit -m 'foo in b' | ||||
$ hg boo | ||||
bm1 3:b87954705719 | ||||
bm3 4:62f4ded848e4 | ||||
* bm4 5:92793bfc8cad | ||||
$ hg push -B bm4 | ||||
|
r35394 | pushing to $TESTTMP/repo3 | ||
|
r23548 | searching for changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
exporting bookmark bm4 | ||||
$ cd ../repo1 | ||||
$ hg bookmarks | ||||
* bm1 3:b87954705719 | ||||
bm3 4:62f4ded848e4 | ||||
bm4 5:92793bfc8cad | ||||
$ cd ../repo3 | ||||
$ hg bookmarks | ||||
bm1 3:b87954705719 | ||||
* bm3 4:62f4ded848e4 | ||||
bm4 5:92793bfc8cad | ||||
$ cd .. | ||||
test behavior when sharing a shared repo | ||||
|
r23614 | $ hg share -B repo3 repo5 | ||
|
r23548 | updating working directory | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd repo5 | ||||
$ hg book | ||||
bm1 3:b87954705719 | ||||
bm3 4:62f4ded848e4 | ||||
bm4 5:92793bfc8cad | ||||
$ cd .. | ||||
test what happens when an active bookmark is deleted | ||||
$ cd repo1 | ||||
$ hg boo -d bm3 | ||||
$ hg boo | ||||
* bm1 3:b87954705719 | ||||
bm4 5:92793bfc8cad | ||||
$ cd ../repo3 | ||||
$ hg boo | ||||
bm1 3:b87954705719 | ||||
bm4 5:92793bfc8cad | ||||
$ cd .. | ||||
verify that bookmarks are not written on failed transaction | ||||
$ cat > failpullbookmarks.py << EOF | ||||
> """A small extension that makes bookmark pulls fail, for testing""" | ||||
|
r33988 | > from __future__ import absolute_import | ||
> from mercurial import ( | ||||
> error, | ||||
> exchange, | ||||
> extensions, | ||||
> ) | ||||
|
r23548 | > def _pullbookmarks(orig, pullop): | ||
> orig(pullop) | ||||
> raise error.HookAbort('forced failure by extension') | ||||
> def extsetup(ui): | ||||
> extensions.wrapfunction(exchange, '_pullbookmarks', _pullbookmarks) | ||||
> EOF | ||||
$ cd repo4 | ||||
$ hg boo | ||||
bm1 3:b87954705719 | ||||
bm3 4:62f4ded848e4 | ||||
* bm4 5:92793bfc8cad | ||||
$ cd ../repo3 | ||||
$ hg boo | ||||
bm1 3:b87954705719 | ||||
bm4 5:92793bfc8cad | ||||
$ hg --config "extensions.failpullbookmarks=$TESTTMP/failpullbookmarks.py" pull $TESTTMP/repo4 | ||||
|
r35394 | pulling from $TESTTMP/repo4 | ||
|
r23548 | searching for changes | ||
no changes found | ||||
adding remote bookmark bm3 | ||||
abort: forced failure by extension | ||||
[255] | ||||
$ hg boo | ||||
bm1 3:b87954705719 | ||||
bm4 5:92793bfc8cad | ||||
$ hg pull $TESTTMP/repo4 | ||||
|
r35394 | pulling from $TESTTMP/repo4 | ||
|
r23548 | searching for changes | ||
no changes found | ||||
adding remote bookmark bm3 | ||||
|
r38268 | 1 local changesets published | ||
|
r23548 | $ hg boo | ||
bm1 3:b87954705719 | ||||
* bm3 4:62f4ded848e4 | ||||
bm4 5:92793bfc8cad | ||||
$ cd .. | ||||
verify bookmark behavior after unshare | ||||
$ cd repo3 | ||||
$ hg unshare | ||||
$ hg boo | ||||
bm1 3:b87954705719 | ||||
* bm3 4:62f4ded848e4 | ||||
bm4 5:92793bfc8cad | ||||
$ hg boo -d bm4 | ||||
$ hg boo bm5 | ||||
$ hg boo | ||||
bm1 3:b87954705719 | ||||
bm3 4:62f4ded848e4 | ||||
* bm5 4:62f4ded848e4 | ||||
$ cd ../repo1 | ||||
$ hg boo | ||||
* bm1 3:b87954705719 | ||||
bm3 4:62f4ded848e4 | ||||
bm4 5:92793bfc8cad | ||||
$ cd .. | ||||
|
r31133 | test shared clones using relative paths work | ||
$ mkdir thisdir | ||||
$ hg init thisdir/orig | ||||
$ hg share -U thisdir/orig thisdir/abs | ||||
$ hg share -U --relative thisdir/abs thisdir/rel | ||||
$ cat thisdir/rel/.hg/sharedpath | ||||
|
r35394 | ../../orig/.hg (no-eol) | ||
|
r31133 | $ grep shared thisdir/*/.hg/requires | ||
thisdir/abs/.hg/requires:shared | ||||
thisdir/rel/.hg/requires:shared | ||||
thisdir/rel/.hg/requires:relshared | ||||
test that relative shared paths aren't relative to $PWD | ||||
$ cd thisdir | ||||
$ hg -R rel root | ||||
|
r35394 | $TESTTMP/thisdir/rel | ||
|
r31133 | $ cd .. | ||
now test that relative paths really are relative, survive across | ||||
renames and changes of PWD | ||||
$ hg -R thisdir/abs root | ||||
|
r35394 | $TESTTMP/thisdir/abs | ||
|
r31133 | $ hg -R thisdir/rel root | ||
|
r35394 | $TESTTMP/thisdir/rel | ||
|
r31133 | $ mv thisdir thatdir | ||
$ hg -R thatdir/abs root | ||||
|
r35394 | abort: .hg/sharedpath points to nonexistent directory $TESTTMP/thisdir/orig/.hg! | ||
|
r31133 | [255] | ||
$ hg -R thatdir/rel root | ||||
|
r35394 | $TESTTMP/thatdir/rel | ||
|
r31212 | |||
test unshare relshared repo | ||||
$ cd thatdir/rel | ||||
$ hg unshare | ||||
$ test -d .hg/store | ||||
$ test -f .hg/sharedpath | ||||
[1] | ||||
$ grep shared .hg/requires | ||||
[1] | ||||
$ hg unshare | ||||
abort: this is not a shared repo | ||||
[255] | ||||
$ cd ../.. | ||||
|
r31133 | $ rm -r thatdir | ||
|
r17539 | Explicitly kill daemons to let the test exit on Windows | ||
|
r25474 | $ killdaemons.py | ||
|
r17539 | |||