sapling/eden/scm/tests/test-remotenames-selective-pull.t
Durham Goode 8fb6b52ac1 treemanifest: move test server logic to separate extension
Summary:
The treemanifest store and pull/push logic is overly complicated.
Untangling it is a bit tricky since it needs to support both server and client
use cases. Since we no longer care about the server code except for tests, let's
copy the treemanifest extension and use it for the server repo in tests.

A future diff will take advantage of this to delete all the server logic from
the main treemanifest extension.

Reviewed By: quark-zju

Differential Revision: D29115069

fbshipit-source-id: 8b7080aa6c7de77be058b34baad5e976cd7c1acf
2021-07-01 09:31:15 -07:00

423 lines
14 KiB
Perl

#chg-compatible
$ configure dummyssh
$ enable remotenames
Set up repos
$ hg init remoterepo --config extensions.treemanifest=$TESTDIR/../edenscm/hgext/treemanifestserver.py
$ cd remoterepo
$ setconfig treemanifest.server=True extensions.treemanifest=$TESTDIR/../edenscm/hgext/treemanifestserver.py
$ cd ..
$ hg clone --config remotenames.selectivepull=True --config remotenames.selectivepulldefault=master -q ssh://user@dummy/remoterepo localrepo
$ cd localrepo
$ setconfig remotenames.selectivepull=True
$ setconfig remotenames.selectivepulldefault=master
$ cd ..
Pull master bookmark
$ cd remoterepo
$ echo a > a
$ hg add a
$ hg commit -m 'First'
$ hg book master
$ cd ../localrepo
$ hg pull
pulling from ssh://user@dummy/remoterepo
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
$ hg bookmarks --list-subscriptions
default/master 1449e7934ec1
Create another bookmark on the remote repo
$ cd ../remoterepo
$ hg up null
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
(leaving bookmark master)
$ hg book secondbook
$ echo b >> a
$ hg add a
$ hg commit -m 'Commit secondbook points to'
Do not pull new boookmark from local repo
$ cd ../localrepo
$ hg pull
pulling from ssh://user@dummy/remoterepo
no changes found
$ hg bookmarks --list-subscriptions
default/master 1449e7934ec1
Do not pull new bookmark even if it on the same commit as old bookmark
$ cd ../remoterepo
$ hg up -q master
$ hg book thirdbook
$ hg book book-with-dashes
$ cd ../localrepo
$ hg pull
pulling from ssh://user@dummy/remoterepo
no changes found
$ hg bookmarks --list-subscriptions
default/master 1449e7934ec1
Move master bookmark
$ cd ../remoterepo
$ hg up -q master
$ echo a >> a
$ hg commit -m 'Move master bookmark'
$ cd ../localrepo
$ hg pull
pulling from ssh://user@dummy/remoterepo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
$ hg bookmarks --list-subscriptions
default/master 0238718db2b1
Specify bookmark to pull
$ hg pull -B secondbook
pulling from ssh://user@dummy/remoterepo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
$ hg bookmarks --list-subscriptions
default/master 0238718db2b1
default/secondbook ed7a9fd254d1
Create second remote
$ cd ..
$ hg clone -q ssh://user@dummy/remoterepo secondremoterepo
$ cd secondremoterepo
$ hg up -q 0238718db2b1
$ hg book master --force
$ cd ..
Add second remote repo path in localrepo
$ cd localrepo
$ setglobalconfig paths.secondremote="ssh://user@dummy/secondremoterepo"
$ hg pull secondremote
pulling from ssh://user@dummy/secondremoterepo
no changes found
$ hg book --list-subscriptions
default/master 0238718db2b1
default/secondbook ed7a9fd254d1
secondremote/master 0238718db2b1
Move bookmark in second remote, pull and make sure it doesn't move in local repo
$ cd ../secondremoterepo
$ hg book secondbook --force
$ echo aaa >> a
$ hg commit -m 'Move bookmark in second remote'
$ cd ../localrepo
$ hg pull secondremote
pulling from ssh://user@dummy/secondremoterepo
no changes found
Move bookmark in first remote, pull and make sure it moves in local repo
$ cd ../remoterepo
$ hg up -q secondbook
$ echo bbb > a
$ hg commit -m 'Moves second bookmark'
$ cd ../localrepo
$ hg pull
pulling from ssh://user@dummy/remoterepo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
$ hg bookmarks --list-subscriptions
default/master 0238718db2b1
default/secondbook c47dca9795c9
secondremote/master 0238718db2b1
Delete bookmark on the server
$ cd ../remoterepo
$ hg book -d secondbook
$ cd ../localrepo
$ hg pull
pulling from ssh://user@dummy/remoterepo
no changes found
$ hg bookmarks --list-subscriptions
default/master 0238718db2b1
secondremote/master 0238718db2b1
Update to the remote bookmark
$ hg update thirdbook --config 'remotenames.autopullhoistpattern=re:.*'
pulling 'thirdbook' from 'ssh://user@dummy/remoterepo'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg book --verbose
no bookmarks set
$ hg book --list-subscriptions
default/master 0238718db2b1
default/thirdbook 1449e7934ec1
secondremote/master 0238718db2b1
Trying to update to unknown bookmark
$ hg update unknownbook --config 'remotenames.autopullhoistpattern=re:.*'
pulling 'unknownbook' from 'ssh://user@dummy/remoterepo'
abort: unknown revision 'unknownbook'!
[255]
Update to the remote bookmark from secondremote
$ hg update secondremote/secondbook --config 'remotenames.autopullpattern=re:.*' --config remotenames.autopullhoistpattern=
pulling 'secondbook' from 'ssh://user@dummy/secondremoterepo'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg book --list-subscriptions
default/master 0238718db2b1
default/thirdbook 1449e7934ec1
secondremote/master 0238718db2b1
secondremote/secondbook 0022441e80e5
Update make sure revsets work
$ hg up '.^'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Make another clone with selectivepull disabled
$ cd ..
$ hg clone -q ssh://user@dummy/remoterepo localrepo2
$ cd localrepo2
$ hg book --list-subscriptions
default/book-with-dashes 1449e7934ec1
default/master 0238718db2b1
default/thirdbook 1449e7934ec1
Enable selectivepull and make a pull. All the bookmarks remain.
This is expected. Enabling selectivepull for the existing repo
won't reduce the number of subscribed bookmarks.
$ setconfig remotenames.selectivepull=True
$ setconfig remotenames.selectivepulldefault=master
$ hg pull -q
$ hg book --list-subscriptions
default/book-with-dashes 1449e7934ec1
default/master 0238718db2b1
default/thirdbook 1449e7934ec1
Clean the repo and make a fresh clone with right configuration.
$ cd ..
$ rm -rf localrepo2
$ hg clone --config remotenames.selectivepull=True --config remotenames.selectivepulldefault=master -q ssh://user@dummy/remoterepo localrepo2
$ cd localrepo2
$ setconfig remotenames.selectivepull=True
$ setconfig remotenames.selectivepulldefault=master
$ hg pull
pulling from ssh://user@dummy/remoterepo
no changes found
$ hg book --list-subscriptions
default/master 0238718db2b1
By using "default/" the commit gets automatically pulled
$ hg log -r default/thirdbook
pulling 'thirdbook' from 'ssh://user@dummy/remoterepo'
commit: 1449e7934ec1
bookmark: default/thirdbook
hoistedname: thirdbook
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: First
Set two bookmarks in selectivepulldefault, make sure both of them were pulled
$ setconfig "remotenames.selectivepulldefault=master,thirdbook"
$ hg pull -q
$ hg book --list-subscriptions
default/master 0238718db2b1
default/thirdbook 1449e7934ec1
Check that `--remote` shows real remote bookmarks from default remote
$ hg book --remote
default/book-with-dashes 1449e7934ec1c4d0c2eefb1194c1cb70e78ba232
default/master 0238718db2b174d2622ae9c4c75d61745eb12b25
default/thirdbook 1449e7934ec1c4d0c2eefb1194c1cb70e78ba232
$ hg book --remote -Tjson
[
{
"node": "1449e7934ec1c4d0c2eefb1194c1cb70e78ba232",
"remotebookmark": "default/book-with-dashes"
},
{
"node": "0238718db2b174d2622ae9c4c75d61745eb12b25",
"remotebookmark": "default/master"
},
{
"node": "1449e7934ec1c4d0c2eefb1194c1cb70e78ba232",
"remotebookmark": "default/thirdbook"
}
]
$ hg --config extensions.infinitepush= book --remote --remote-path ssh://user@dummy/secondremoterepo
secondremote/master 0238718db2b174d2622ae9c4c75d61745eb12b25
secondremote/secondbook 0022441e80e5ed8a23872349474506906b9507e0
when selectivepull is disabled
$ hg book --remote --config remotenames.selectivepull=false
default/master 0238718db2b1
default/thirdbook 1449e7934ec1
$ hg book --remote --config remotenames.selectivepull=false -Tjson
[
{
"node": "0238718db2b174d2622ae9c4c75d61745eb12b25",
"remotebookmark": "default/master"
},
{
"node": "1449e7934ec1c4d0c2eefb1194c1cb70e78ba232",
"remotebookmark": "default/thirdbook"
}
]
Clone remote repo with the selectivepull enabled
$ cd ..
$ hg clone --config remotenames.selectivepull=True --config remotenames.selectivepulldefault=master ssh://user@dummy/remoterepo new_localrepo
requesting all changes
adding changesets
adding manifests
adding file changes
added 4 changesets with 4 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd new_localrepo
$ setconfig remotenames.selectivepull=True
$ setconfig remotenames.selectivepulldefault=master
$ hg book --list-subscriptions
default/master 0238718db2b1
Check remote bookmarks after push
$ hg up master -q
$ echo "new commit to push" >> pushsh
$ hg commit -qAm "push commit"
$ hg push -r . --to master -q
$ hg book --list-subscriptions
default/master a81520e7283a
Check the repo.pull API
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
- Pull nothing != Pull everything
$ hg debugpull
$ hg log -Gr 'all()' -T '{node} {desc} {remotenames}'
- Pull a name, and an unknown name. The unknown name is not an error (it will delete the name).
$ hg debugpull -B thirdbook -B not-found
$ hg log -Gr 'all()' -T '{node} {desc} {remotenames}'
o 1449e7934ec1c4d0c2eefb1194c1cb70e78ba232 First default/thirdbook
- Only pull 'master' without 'thirdbook'. This will not work if remotenames expull is not bypassed.
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ hg debugpull -B master
$ hg log -Gr 'all()' -T '{node} {desc} {remotenames}'
o a81520e7283a6967ec1d82620b75ab92f5478638 push commit default/master
o 0238718db2b174d2622ae9c4c75d61745eb12b25 Move master bookmark
o 1449e7934ec1c4d0c2eefb1194c1cb70e78ba232 First
- Pull by hash + name + prefix
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ hg debugpull -B thirdbook -r 0238718db2b174d2622ae9c4c75d61745eb12b25 -r 1449e7934ec1c
$ hg log -Gr 'all()' -T '{node} {desc} {remotenames}'
o 0238718db2b174d2622ae9c4c75d61745eb12b25 Move master bookmark
o 1449e7934ec1c4d0c2eefb1194c1cb70e78ba232 First default/thirdbook
- Auto pull in revset resolution
-- For remote bookmark names:
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ setconfig remotenames.autopullpattern=
$ hg log -r default/thirdbook::default/master -T '{node} {desc} {remotenames}\n'
abort: unknown revision 'default/thirdbook'!
[255]
$ setconfig 'remotenames.autopullpattern=re:^default/[a-z]+$'
$ hg log -r default/thirdbook::default/master -T '{node} {desc} {remotenames}\n'
pulling 'master', 'thirdbook' from 'ssh://user@dummy/remoterepo'
1449e7934ec1c4d0c2eefb1194c1cb70e78ba232 First default/thirdbook
0238718db2b174d2622ae9c4c75d61745eb12b25 Move master bookmark
a81520e7283a6967ec1d82620b75ab92f5478638 push commit default/master
-- For hoisted remote bookmark names:
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ setconfig remotenames.autopullhoistpattern=
$ hg log -r thirdbook::master -T '{node} {desc} {remotenames}\n'
abort: unknown revision 'thirdbook'!
[255]
$ setconfig 'remotenames.autopullhoistpattern=re:.*'
$ hg log -r thirdbook::master -T '{node} {desc} {remotenames}\n'
pulling 'thirdbook::master' from 'ssh://user@dummy/remoterepo'
pulling 'master', 'thirdbook' from 'ssh://user@dummy/remoterepo'
1449e7934ec1c4d0c2eefb1194c1cb70e78ba232 First default/thirdbook
0238718db2b174d2622ae9c4c75d61745eb12b25 Move master bookmark
a81520e7283a6967ec1d82620b75ab92f5478638 push commit default/master
-- Names with revset operators can also be auto pulled.
$ hg log -r book-with-dashes -T '{desc}\n'
pulling 'book-with-dashes' from 'ssh://user@dummy/remoterepo'
First
-- Quoting works:
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ hg log -r '::"default/book-with-dashes"' -T '{desc}\n'
pulling 'book-with-dashes' from 'ssh://user@dummy/remoterepo'
First
-- For commit hashes:
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ hg log -r '::1449e7934ec1c4d0c2eefb1194c1cb70e78ba232'
pulling '1449e7934ec1c4d0c2eefb1194c1cb70e78ba232' from 'ssh://user@dummy/remoterepo'
commit: 1449e7934ec1
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: First
--- The above pull pulls "master" as a side effect to make sure phases are correct.
--- Therefore 0238718db becomes available locally.
$ hg update '0238718db^'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- For "+" in revset expressions:
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ hg log -r '023871+1449e793' -T "{node}\n"
pulling '023871', '1449e793' from 'ssh://user@dummy/remoterepo'
0238718db2b174d2622ae9c4c75d61745eb12b25
1449e7934ec1c4d0c2eefb1194c1cb70e78ba232
--- x will not be auto-pulled inside "present(x)":
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ hg log -r 'present(023871)' -T "{node}\n"
--- x~y will not auto-pull `y`.
$ newrepo
$ setconfig paths.default=ssh://user@dummy/remoterepo
$ hg log -r '.~1000000' -T "{node}\n"