Details
Details
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Lint
Lint Skipped - Unit
Unit Tests Skipped
| Lint Skipped |
| Unit Tests Skipped |
| Path | Packages | |||
|---|---|---|---|---|
| P | tests/test-share-bookmarks.t (223 lines) Copied from tests/test-share.t | |||
| P | tests/test-share.t (237 lines) Copied to tests/test-share-bookmarks.t |
| Commit | Parents | Author | Summary | Date |
|---|---|---|---|---|
| Martin von Zweigbergk | May 15 2019, 2:38 PM |
| Status | Author | Revision | |
|---|---|---|---|
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz | ||
| Closed | martinvonz |
| $ echo "[extensions]" >> $HGRCPATH | $ echo "[extensions]" >> $HGRCPATH | ||||
| $ echo "share = " >> $HGRCPATH | $ echo "share = " >> $HGRCPATH | ||||
| prepare repo1 | prepare repo1 | ||||
| $ hg init repo1 | $ hg init repo1 | ||||
| $ cd repo1 | $ cd repo1 | ||||
| $ echo a > a | $ echo a > a | ||||
| $ hg commit -A -m'init' | $ hg commit -A -m'init' | ||||
| adding a | 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] | |||||
| share shouldn't have a full cache dir, original repo should | |||||
| $ hg branches | |||||
| default 0:d3873e73d99e | |||||
| $ hg tags | |||||
| tip 0:d3873e73d99e | |||||
| $ test -d .hg/cache | |||||
| [1] | |||||
| $ ls -1 .hg/wcache || true | |||||
| checkisexec (execbit !) | |||||
| checklink (symlink !) | |||||
| checklink-target (symlink !) | |||||
| manifestfulltextcache (reporevlogstore !) | |||||
| $ ls -1 ../repo1/.hg/cache | |||||
| branch2-served | |||||
| rbc-names-v1 | |||||
| rbc-revs-v1 | |||||
| tags2-visible | |||||
| Some sed versions appends newline, some don't, and some just fails | |||||
| $ cat .hg/sharedpath; echo | |||||
| $TESTTMP/repo1/.hg | |||||
| trailing newline on .hg/sharedpath is ok | |||||
| $ hg tip -q | |||||
| 0:d3873e73d99e | |||||
| $ echo '' >> .hg/sharedpath | |||||
| $ cat .hg/sharedpath | |||||
| $TESTTMP/repo1/.hg | |||||
| $ hg tip -q | |||||
| 0:d3873e73d99e | |||||
| commit in shared clone | |||||
| $ echo a >> a | $ echo a >> a | ||||
| $ hg commit -m'change in shared clone' | $ 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 | $ echo b > b | ||||
| $ hg commit -A -m'another file' | $ hg commit -A -m'another file' | ||||
| adding b | adding b | ||||
| check in shared clone | share it | ||||
| $ 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 | |||||
| $ get-with-headers.py localhost:$HGPORT 'raw-file/' | |||||
| 200 Script output follows | |||||
| -rw-r--r-- 4 a | |||||
| -rw-r--r-- 2 b | |||||
| Cloning a shared repo via bundle2 results in a non-shared clone | |||||
| $ cd .. | $ cd .. | ||||
| $ hg clone -q --stream --config ui.ssh="\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/`pwd`/repo2 cloned-via-bundle2 | $ hg share repo1 repo2 | ||||
| $ cat ./cloned-via-bundle2/.hg/requires | grep "shared" | updating working directory | ||||
| [1] | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
| $ hg id --cwd cloned-via-bundle2 -r tip | |||||
| c2e0ac586386 tip | |||||
| $ cd repo2 | |||||
| test unshare command | unshare it | ||||
| $ cd repo2 | |||||
| $ hg unshare | $ 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] | |||||
| check that a change does not propagate | check that a change does not propagate | ||||
| $ echo b >> b | $ echo b >> b | ||||
| $ hg commit -m'change in unshared' | $ hg commit -m'change in unshared' | ||||
| $ cd ../repo1 | $ cd ../repo1 | ||||
| $ hg id -r tip | $ hg id -r tip | ||||
| c2e0ac586386 tip | c2e0ac586386 tip | ||||
| $ cd .. | $ cd .. | ||||
| test sharing bookmarks | test sharing bookmarks | ||||
| $ hg share -B repo1 repo3 | $ hg share -B repo1 repo3 | ||||
| updating working directory | updating working directory | ||||
| 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
| $ cd repo1 | $ cd repo1 | ||||
| $ hg bookmark bm1 | $ hg bookmark bm1 | ||||
| $ hg bookmarks | $ hg bookmarks | ||||
| bm1 3:b87954705719 | bm1 3:b87954705719 | ||||
| * bm3 4:62f4ded848e4 | * bm3 4:62f4ded848e4 | ||||
| $ cd ../repo1 | $ cd ../repo1 | ||||
| $ hg bookmarks | $ hg bookmarks | ||||
| * bm1 3:b87954705719 | * bm1 3:b87954705719 | ||||
| bm3 4:62f4ded848e4 | bm3 4:62f4ded848e4 | ||||
| $ cd .. | $ cd .. | ||||
| non largefiles repos won't enable largefiles | |||||
| $ hg share --config extensions.largefiles= repo3 sharedrepo | |||||
| 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 !) | |||||
| updating working directory | |||||
| 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||||
| $ [ -f sharedrepo/.hg/hgrc ] | |||||
| [1] | |||||
| test pushing bookmarks works | test pushing bookmarks works | ||||
| $ hg clone repo3 repo4 | $ hg clone repo3 repo4 | ||||
| updating to branch default | updating to branch default | ||||
| 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
| $ cd repo4 | $ cd repo4 | ||||
| $ hg boo bm4 | $ hg boo bm4 | ||||
| $ echo foo > b | $ echo foo > b | ||||
| bm3 4:62f4ded848e4 | bm3 4:62f4ded848e4 | ||||
| * bm5 4:62f4ded848e4 | * bm5 4:62f4ded848e4 | ||||
| $ cd ../repo1 | $ cd ../repo1 | ||||
| $ hg boo | $ hg boo | ||||
| * bm1 3:b87954705719 | * bm1 3:b87954705719 | ||||
| bm3 4:62f4ded848e4 | bm3 4:62f4ded848e4 | ||||
| bm4 5:92793bfc8cad | bm4 5:92793bfc8cad | ||||
| $ cd .. | $ cd .. | ||||
| 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 | |||||
| ../../orig/.hg (no-eol) | |||||
| $ grep shared thisdir/*/.hg/requires | |||||
| thisdir/abs/.hg/requires:shared | |||||
| thisdir/rel/.hg/requires:relshared | |||||
| thisdir/rel/.hg/requires:shared | |||||
| test that relative shared paths aren't relative to $PWD | |||||
| $ cd thisdir | |||||
| $ hg -R rel root | |||||
| $TESTTMP/thisdir/rel | |||||
| $ cd .. | |||||
| now test that relative paths really are relative, survive across | |||||
| renames and changes of PWD | |||||
| $ hg -R thisdir/abs root | |||||
| $TESTTMP/thisdir/abs | |||||
| $ hg -R thisdir/rel root | |||||
| $TESTTMP/thisdir/rel | |||||
| $ mv thisdir thatdir | |||||
| $ hg -R thatdir/abs root | |||||
| abort: .hg/sharedpath points to nonexistent directory $TESTTMP/thisdir/orig/.hg! | |||||
| [255] | |||||
| $ hg -R thatdir/rel root | |||||
| $TESTTMP/thatdir/rel | |||||
| 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 ../.. | |||||
| $ rm -r thatdir | |||||
| Demonstrate buggy behavior around requirements validation | |||||
| See comment in localrepo.py:makelocalrepository() for more. | |||||
| $ hg init sharenewrequires | |||||
| $ hg share sharenewrequires shareoldrequires | |||||
| updating working directory | |||||
| 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||||
| $ cat >> sharenewrequires/.hg/requires << EOF | |||||
| > missing-requirement | |||||
| > EOF | |||||
| We cannot open the repo with the unknown requirement | |||||
| $ hg -R sharenewrequires status | |||||
| abort: repository requires features unknown to this Mercurial: missing-requirement! | |||||
| (see https://mercurial-scm.org/wiki/MissingRequirement for more information) | |||||
| [255] | |||||
| BUG: we don't get the same error when opening the shared repo pointing to it | |||||
| $ hg -R shareoldrequires status | |||||
| Explicitly kill daemons to let the test exit on Windows | |||||
| $ killdaemons.py | |||||
| $ hg commit -m'change in unshared' | $ hg commit -m'change in unshared' | ||||
| $ cd ../repo1 | $ cd ../repo1 | ||||
| $ hg id -r tip | $ hg id -r tip | ||||
| c2e0ac586386 tip | c2e0ac586386 tip | ||||
| $ cd .. | $ cd .. | ||||
| test sharing bookmarks | |||||
| $ hg share -B repo1 repo3 | |||||
| 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 | |||||
| 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" | |||||
| > hg -R "$TESTTMP/repo1" bookmarks | |||||
| > echo "@repo2" | |||||
| > hg -R "$TESTTMP/repo2" bookmarks | |||||
| > echo "@repo3" | |||||
| > hg -R "$TESTTMP/repo3" bookmarks | |||||
| > 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 | |||||
| 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 .. | |||||
| non largefiles repos won't enable largefiles | non largefiles repos won't enable largefiles | ||||
| $ hg share --config extensions.largefiles= repo3 sharedrepo | $ hg share --config extensions.largefiles= repo2 sharedrepo | ||||
| 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 !) | ||||
| 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 !) | ||||
| updating working directory | updating working directory | ||||
| 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
| $ [ -f sharedrepo/.hg/hgrc ] | $ [ -f sharedrepo/.hg/hgrc ] | ||||
| [1] | [1] | ||||
| 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 | |||||
| pushing to $TESTTMP/repo3 | |||||
| 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 | |||||
| $ hg share -B repo3 missingdir/repo5 | |||||
| updating working directory | |||||
| 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||||
| $ cd missingdir/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""" | |||||
| > from __future__ import absolute_import | |||||
| > from mercurial import ( | |||||
| > error, | |||||
| > exchange, | |||||
| > extensions, | |||||
| > ) | |||||
| > 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 | |||||
| pulling from $TESTTMP/repo4 | |||||
| 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 | |||||
| pulling from $TESTTMP/repo4 | |||||
| searching for changes | |||||
| no changes found | |||||
| adding remote bookmark bm3 | |||||
| 1 local changesets published | |||||
| $ 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 .. | |||||
| test shared clones using relative paths work | test shared clones using relative paths work | ||||
| $ mkdir thisdir | $ mkdir thisdir | ||||
| $ hg init thisdir/orig | $ hg init thisdir/orig | ||||
| $ hg share -U thisdir/orig thisdir/abs | $ hg share -U thisdir/orig thisdir/abs | ||||
| $ hg share -U --relative thisdir/abs thisdir/rel | $ hg share -U --relative thisdir/abs thisdir/rel | ||||
| $ cat thisdir/rel/.hg/sharedpath | $ cat thisdir/rel/.hg/sharedpath | ||||
| ../../orig/.hg (no-eol) | ../../orig/.hg (no-eol) | ||||