test-share-safe.t
579 lines
| 14.3 KiB
| text/troff
|
Tads3Lexer
/ tests / test-share-safe.t
|
r46055 | setup | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> share = | ||||
> [format] | ||||
> exp-share-safe = True | ||||
> EOF | ||||
prepare source repo | ||||
$ hg init source | ||||
$ cd source | ||||
$ cat .hg/requires | ||||
exp-sharesafe | ||||
$ cat .hg/store/requires | ||||
dotencode | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ hg debugrequirements | ||||
dotencode | ||||
exp-sharesafe | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ echo a > a | ||||
$ hg ci -Aqm "added a" | ||||
$ echo b > b | ||||
$ hg ci -Aqm "added b" | ||||
|
r46058 | |||
$ HGEDITOR=cat hg config --shared | ||||
abort: repository is not shared; can't use --shared | ||||
|
r46431 | [10] | ||
|
r46055 | $ cd .. | ||
Create a shared repo and check the requirements are shared and read correctly | ||||
$ hg share source shared1 | ||||
updating working directory | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd shared1 | ||||
$ cat .hg/requires | ||||
exp-sharesafe | ||||
shared | ||||
$ hg debugrequirements -R ../source | ||||
dotencode | ||||
exp-sharesafe | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ hg debugrequirements | ||||
dotencode | ||||
exp-sharesafe | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
shared | ||||
sparserevlog | ||||
store | ||||
$ echo c > c | ||||
$ hg ci -Aqm "added c" | ||||
|
r46057 | Check that config of the source repository is also loaded | ||
$ hg showconfig ui.curses | ||||
[1] | ||||
$ echo "[ui]" >> ../source/.hg/hgrc | ||||
$ echo "curses=true" >> ../source/.hg/hgrc | ||||
$ hg showconfig ui.curses | ||||
true | ||||
|
r46366 | Test that extensions of source repository are also loaded | ||
$ hg debugextensions | ||||
share | ||||
$ hg extdiff -p echo | ||||
hg: unknown command 'extdiff' | ||||
'extdiff' is provided by the following extension: | ||||
extdiff command to allow external programs to compare revisions | ||||
(use 'hg help extensions' for information on enabling extensions) | ||||
|
r46888 | [10] | ||
|
r46366 | |||
$ echo "[extensions]" >> ../source/.hg/hgrc | ||||
$ echo "extdiff=" >> ../source/.hg/hgrc | ||||
$ hg debugextensions -R ../source | ||||
extdiff | ||||
share | ||||
$ hg extdiff -R ../source -p echo | ||||
|
r46367 | BROKEN: the command below will not work if config of shared source is not loaded | ||
on dispatch but debugextensions says that extension | ||||
|
r46366 | is loaded | ||
$ hg debugextensions | ||||
extdiff | ||||
share | ||||
$ hg extdiff -p echo | ||||
|
r46057 | However, local .hg/hgrc should override the config set by share source | ||
$ echo "[ui]" >> .hg/hgrc | ||||
$ echo "curses=false" >> .hg/hgrc | ||||
$ hg showconfig ui.curses | ||||
false | ||||
|
r46058 | $ HGEDITOR=cat hg config --shared | ||
[ui] | ||||
curses=true | ||||
|
r46366 | [extensions] | ||
extdiff= | ||||
|
r46058 | |||
$ HGEDITOR=cat hg config --local | ||||
[ui] | ||||
curses=false | ||||
|
r46057 | Testing that hooks set in source repository also runs in shared repo | ||
$ cd ../source | ||||
$ cat <<EOF >> .hg/hgrc | ||||
> [extensions] | ||||
> hooklib= | ||||
> [hooks] | ||||
> pretxnchangegroup.reject_merge_commits = \ | ||||
> python:hgext.hooklib.reject_merge_commits.hook | ||||
> EOF | ||||
$ cd .. | ||||
$ hg clone source cloned | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd cloned | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||||
$ echo bar > bar | ||||
$ hg ci -Aqm "added bar" | ||||
$ hg merge | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg ci -m "merge commit" | ||||
$ hg push ../source | ||||
pushing to ../source | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
error: pretxnchangegroup.reject_merge_commits hook failed: bcde3522682d rejected as merge on the same branch. Please consider rebase. | ||||
transaction abort! | ||||
rollback completed | ||||
abort: bcde3522682d rejected as merge on the same branch. Please consider rebase. | ||||
[255] | ||||
$ hg push ../shared1 | ||||
pushing to ../shared1 | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
error: pretxnchangegroup.reject_merge_commits hook failed: bcde3522682d rejected as merge on the same branch. Please consider rebase. | ||||
transaction abort! | ||||
rollback completed | ||||
abort: bcde3522682d rejected as merge on the same branch. Please consider rebase. | ||||
[255] | ||||
Test that if share source config is untrusted, we dont read it | ||||
$ cd ../shared1 | ||||
$ cat << EOF > $TESTTMP/untrusted.py | ||||
> from mercurial import scmutil, util | ||||
> def uisetup(ui): | ||||
> class untrustedui(ui.__class__): | ||||
> def _trusted(self, fp, f): | ||||
> if util.normpath(fp.name).endswith(b'source/.hg/hgrc'): | ||||
> return False | ||||
> return super(untrustedui, self)._trusted(fp, f) | ||||
> ui.__class__ = untrustedui | ||||
> EOF | ||||
$ hg showconfig hooks | ||||
hooks.pretxnchangegroup.reject_merge_commits=python:hgext.hooklib.reject_merge_commits.hook | ||||
$ hg showconfig hooks --config extensions.untrusted=$TESTTMP/untrusted.py | ||||
[1] | ||||
|
r46059 | Update the source repository format and check that shared repo works | ||
$ cd ../source | ||||
|
r46114 | |||
Disable zstd related tests because its not present on pure version | ||||
#if zstd | ||||
|
r46059 | $ echo "[format]" >> .hg/hgrc | ||
$ echo "revlog-compression=zstd" >> .hg/hgrc | ||||
$ hg debugupgraderepo --run -q | ||||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, exp-sharesafe, fncache, generaldelta, revlogv1, sparserevlog, store | ||||
added: revlog-compression-zstd | ||||
r46649 | processed revlogs: | |||
- all-filelogs | ||||
- changelog | ||||
- manifest | ||||
|
r46059 | $ hg log -r . | ||
changeset: 1:5f6d8a4bf34a | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: added b | ||||
|
r46114 | #endif | ||
$ echo "[format]" >> .hg/hgrc | ||||
$ echo "use-persistent-nodemap=True" >> .hg/hgrc | ||||
$ hg debugupgraderepo --run -q -R ../shared1 | ||||
abort: cannot upgrade repository; unsupported source requirement: shared | ||||
[255] | ||||
$ hg debugupgraderepo --run -q | ||||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, exp-sharesafe, fncache, generaldelta, revlogv1, sparserevlog, store (no-zstd !) | ||||
preserved: dotencode, exp-sharesafe, fncache, generaldelta, revlog-compression-zstd, revlogv1, sparserevlog, store (zstd !) | ||||
added: persistent-nodemap | ||||
r46649 | processed revlogs: | |||
- all-filelogs | ||||
- changelog | ||||
- manifest | ||||
|
r46114 | $ hg log -r . | ||
changeset: 1:5f6d8a4bf34a | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: added b | ||||
|
r46059 | Shared one should work | ||
$ cd ../shared1 | ||||
$ hg log -r . | ||||
changeset: 2:155349b645be | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: added c | ||||
|
r46368 | |||
Testing that nonsharedrc is loaded for source and not shared | ||||
$ cd ../source | ||||
$ touch .hg/hgrc-not-shared | ||||
$ echo "[ui]" >> .hg/hgrc-not-shared | ||||
$ echo "traceback=true" >> .hg/hgrc-not-shared | ||||
$ hg showconfig ui.traceback | ||||
true | ||||
$ HGEDITOR=cat hg config --non-shared | ||||
[ui] | ||||
traceback=true | ||||
$ cd ../shared1 | ||||
$ hg showconfig ui.traceback | ||||
[1] | ||||
|
r46057 | Unsharing works | ||
|
r46055 | $ hg unshare | ||
|
r46057 | |||
Test that source config is added to the shared one after unshare, and the config | ||||
of current repo is still respected over the config which came from source config | ||||
$ cd ../cloned | ||||
$ hg push ../shared1 | ||||
pushing to ../shared1 | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
error: pretxnchangegroup.reject_merge_commits hook failed: bcde3522682d rejected as merge on the same branch. Please consider rebase. | ||||
transaction abort! | ||||
rollback completed | ||||
abort: bcde3522682d rejected as merge on the same branch. Please consider rebase. | ||||
[255] | ||||
$ hg showconfig ui.curses -R ../shared1 | ||||
false | ||||
|
r46617 | |||
$ cd ../ | ||||
Test that upgrading using debugupgraderepo works | ||||
================================================= | ||||
$ hg init non-share-safe --config format.exp-share-safe=false | ||||
$ cd non-share-safe | ||||
$ hg debugrequirements | ||||
dotencode | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ echo foo > foo | ||||
$ hg ci -Aqm 'added foo' | ||||
$ echo bar > bar | ||||
$ hg ci -Aqm 'added bar' | ||||
Create a share before upgrading | ||||
$ cd .. | ||||
$ hg share non-share-safe nss-share | ||||
updating working directory | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg debugrequirements -R nss-share | ||||
dotencode | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
shared | ||||
sparserevlog | ||||
store | ||||
$ cd non-share-safe | ||||
Upgrade | ||||
$ hg debugupgraderepo -q | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store | ||||
added: exp-sharesafe | ||||
r46649 | processed revlogs: | |||
- all-filelogs | ||||
- changelog | ||||
- manifest | ||||
|
r46617 | $ hg debugupgraderepo --run -q | ||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store | ||||
added: exp-sharesafe | ||||
r46649 | processed revlogs: | |||
- all-filelogs | ||||
- changelog | ||||
- manifest | ||||
|
r46617 | repository upgraded to share safe mode, existing shares will still work in old non-safe mode. Re-share existing shares to use them in safe mode New shares will be created in safe mode. | ||
$ hg debugrequirements | ||||
dotencode | ||||
exp-sharesafe | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ cat .hg/requires | ||||
exp-sharesafe | ||||
$ cat .hg/store/requires | ||||
dotencode | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ hg log -GT "{node}: {desc}\n" | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
Make sure existing shares still works | ||||
|
r46855 | $ hg log -GT "{node}: {desc}\n" -R ../nss-share --config experimental.sharesafe-warn-outdated-shares=false | ||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
|
r46617 | $ hg log -GT "{node}: {desc}\n" -R ../nss-share | ||
|
r46619 | warning: source repository supports share-safe functionality. Reshare to upgrade. | ||
|
r46617 | @ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
|
r46618 | |||
Create a safe share from upgrade one | ||||
$ cd .. | ||||
$ hg share non-share-safe ss-share | ||||
updating working directory | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd ss-share | ||||
$ hg log -GT "{node}: {desc}\n" | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
$ cd ../non-share-safe | ||||
Test that downgrading works too | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> share = | ||||
> [format] | ||||
> exp-share-safe = False | ||||
> EOF | ||||
$ hg debugupgraderepo -q | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store | ||||
removed: exp-sharesafe | ||||
r46649 | processed revlogs: | |||
- all-filelogs | ||||
- changelog | ||||
- manifest | ||||
|
r46618 | $ hg debugupgraderepo -q --run | ||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store | ||||
removed: exp-sharesafe | ||||
r46649 | processed revlogs: | |||
- all-filelogs | ||||
- changelog | ||||
- manifest | ||||
|
r46618 | repository downgraded to not use share safe mode, existing shares will not work and needs to be reshared. | ||
$ hg debugrequirements | ||||
dotencode | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ cat .hg/requires | ||||
dotencode | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ test -f .hg/store/requires | ||||
[1] | ||||
$ hg log -GT "{node}: {desc}\n" | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
Make sure existing shares still works | ||||
$ hg log -GT "{node}: {desc}\n" -R ../nss-share | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
$ hg log -GT "{node}: {desc}\n" -R ../ss-share | ||||
abort: share source does not support exp-sharesafe requirement | ||||
[255] | ||||
|
r46852 | |||
|
r46853 | Testing automatic downgrade of shares when config is set | ||
$ touch ../ss-share/.hg/wlock | ||||
$ hg log -GT "{node}: {desc}\n" -R ../ss-share --config experimental.sharesafe-auto-downgrade-shares=true | ||||
abort: failed to downgrade share, got error: Lock held | ||||
[255] | ||||
$ rm ../ss-share/.hg/wlock | ||||
$ hg log -GT "{node}: {desc}\n" -R ../ss-share --config experimental.sharesafe-auto-downgrade-shares=true | ||||
repository downgraded to not use share-safe mode | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
$ hg log -GT "{node}: {desc}\n" -R ../ss-share | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
|
r46852 | |||
Testing automatic upgrade of shares when config is set | ||||
$ hg debugupgraderepo -q --run --config format.exp-share-safe=True | ||||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store | ||||
added: exp-sharesafe | ||||
processed revlogs: | ||||
- all-filelogs | ||||
- changelog | ||||
- manifest | ||||
repository upgraded to share safe mode, existing shares will still work in old non-safe mode. Re-share existing shares to use them in safe mode New shares will be created in safe mode. | ||||
$ hg debugrequirements | ||||
dotencode | ||||
exp-sharesafe | ||||
fncache | ||||
generaldelta | ||||
revlogv1 | ||||
sparserevlog | ||||
store | ||||
$ hg log -GT "{node}: {desc}\n" -R ../nss-share | ||||
warning: source repository supports share-safe functionality. Reshare to upgrade. | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
Check that if lock is taken, upgrade fails but read operation are successful | ||||
$ touch ../nss-share/.hg/wlock | ||||
$ hg log -GT "{node}: {desc}\n" -R ../nss-share --config experimental.sharesafe-auto-upgrade-shares=true | ||||
failed to upgrade share, got error: Lock held | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
|
r46855 | |||
$ hg log -GT "{node}: {desc}\n" -R ../nss-share --config experimental.sharesafe-auto-upgrade-shares=true --config experimental.sharesafe-warn-outdated-shares=false | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
|
r46856 | $ hg log -GT "{node}: {desc}\n" -R ../nss-share --config experimental.sharesafe-auto-upgrade-shares=true --config experimental.sharesafe-auto-upgrade-fail-error=true | ||
abort: failed to upgrade share, got error: Lock held | ||||
[255] | ||||
|
r46852 | $ rm ../nss-share/.hg/wlock | ||
$ hg log -GT "{node}: {desc}\n" -R ../nss-share --config experimental.sharesafe-auto-upgrade-shares=true | ||||
repository upgraded to use share-safe mode | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||
Test that unshare works | ||||
$ hg unshare -R ../nss-share | ||||
$ hg log -GT "{node}: {desc}\n" -R ../nss-share | ||||
@ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar | ||||
| | ||||
o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo | ||||