|
|
========================================================
|
|
|
Test the ability to access a hidden revision on a server
|
|
|
========================================================
|
|
|
|
|
|
#require serve
|
|
|
|
|
|
$ . $TESTDIR/testlib/obsmarker-common.sh
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
|
> [ui]
|
|
|
> ssh = "$PYTHON" "$RUNTESTDIR/dummyssh"
|
|
|
> [phases]
|
|
|
> # public changeset are not obsolete
|
|
|
> publish=false
|
|
|
> [experimental]
|
|
|
> evolution=all
|
|
|
> [ui]
|
|
|
> logtemplate='{rev}:{node|short} {desc} [{phase}]\n'
|
|
|
> EOF
|
|
|
|
|
|
Setup a simple repository with some hidden revisions
|
|
|
----------------------------------------------------
|
|
|
|
|
|
Testing the `served.hidden` view
|
|
|
|
|
|
$ hg init repo-with-hidden
|
|
|
$ cd repo-with-hidden
|
|
|
|
|
|
$ echo 0 > a
|
|
|
$ hg ci -qAm "c_Public"
|
|
|
$ hg phase --public
|
|
|
$ echo 1 > a
|
|
|
$ hg ci -m "c_Amend_Old"
|
|
|
$ echo 2 > a
|
|
|
$ hg ci -m "c_Amend_New" --amend
|
|
|
$ hg up ".^"
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
$ echo 3 > a
|
|
|
$ hg ci -m "c_Pruned"
|
|
|
created new head
|
|
|
$ hg debugobsolete --record-parents `getid 'desc("c_Pruned")'` -d '0 0'
|
|
|
1 new obsolescence markers
|
|
|
obsoleted 1 changesets
|
|
|
$ hg up ".^"
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
$ echo 4 > a
|
|
|
$ hg ci -m "c_Secret" --secret
|
|
|
created new head
|
|
|
$ echo 5 > a
|
|
|
$ hg ci -m "c_Secret_Pruned" --secret
|
|
|
$ hg debugobsolete --record-parents `getid 'desc("c_Secret_Pruned")'` -d '0 0'
|
|
|
1 new obsolescence markers
|
|
|
obsoleted 1 changesets
|
|
|
$ hg up null
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
|
|
$ hg log -G -T '{rev}:{node|short} {desc} [{phase}]\n' --hidden
|
|
|
x 5:8d28cbe335f3 c_Secret_Pruned [secret]
|
|
|
|
|
|
|
o 4:1c6afd79eb66 c_Secret [secret]
|
|
|
|
|
|
|
| x 3:5d1575e42c25 c_Pruned [draft]
|
|
|
|/
|
|
|
| o 2:c33affeb3f6b c_Amend_New [draft]
|
|
|
|/
|
|
|
| x 1:be215fbb8c50 c_Amend_Old [draft]
|
|
|
|/
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
$ hg debugobsolete
|
|
|
be215fbb8c5090028b00154c1fe877ad1b376c61 c33affeb3f6b4e9621d1839d6175ddc07708807c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'}
|
|
|
5d1575e42c25b7f2db75cd4e0b881b1c35158fae 0 {5f354f46e5853535841ec7a128423e991ca4d59b} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
|
|
|
8d28cbe335f311bc89332d7bbe8a07889b6914a0 0 {1c6afd79eb6663275bbe30097e162b1c24ced0f0} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
Test the feature
|
|
|
================
|
|
|
|
|
|
Check cache pre-warm
|
|
|
--------------------
|
|
|
|
|
|
$ ls -1 repo-with-hidden/.hg/cache
|
|
|
branch2
|
|
|
branch2-base
|
|
|
branch2-served
|
|
|
branch2-served.hidden
|
|
|
branch2-visible
|
|
|
rbc-names-v2
|
|
|
rbc-revs-v2
|
|
|
tags2
|
|
|
tags2-visible
|
|
|
|
|
|
Check that the `served.hidden` repoview
|
|
|
---------------------------------------
|
|
|
|
|
|
$ hg -R repo-with-hidden serve -p $HGPORT -d --pid-file hg.pid --config web.view=served.hidden
|
|
|
$ cat hg.pid >> $DAEMON_PIDS
|
|
|
|
|
|
changesets in secret and higher phases are not visible through hgweb
|
|
|
|
|
|
$ hg -R repo-with-hidden log --template "revision: {rev}\\n" --rev "reverse(not secret())"
|
|
|
revision: 2
|
|
|
revision: 0
|
|
|
$ hg -R repo-with-hidden log --template "revision: {rev}\\n" --rev "reverse(not secret())" --hidden
|
|
|
revision: 3
|
|
|
revision: 2
|
|
|
revision: 1
|
|
|
revision: 0
|
|
|
$ get-with-headers.py localhost:$HGPORT 'log?style=raw' | grep revision:
|
|
|
revision: 3
|
|
|
revision: 2
|
|
|
revision: 1
|
|
|
revision: 0
|
|
|
|
|
|
$ killdaemons.py
|
|
|
|
|
|
Test --remote-hidden for local peer
|
|
|
-----------------------------------
|
|
|
|
|
|
$ hg clone --pull repo-with-hidden client
|
|
|
requesting all changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 2 changesets with 2 changes to 1 files
|
|
|
2 new obsolescence markers
|
|
|
new changesets 5f354f46e585:c33affeb3f6b (1 drafts)
|
|
|
updating to branch default
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
$ hg -R client log -G --hidden -v
|
|
|
@ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
pulling an hidden changeset should fail:
|
|
|
|
|
|
$ hg -R client pull -r be215fbb8c50
|
|
|
pulling from $TESTTMP/repo-with-hidden
|
|
|
abort: filtered revision 'be215fbb8c50' (not in 'served' subset)
|
|
|
[10]
|
|
|
|
|
|
pulling an hidden changeset with --remote-hidden should succeed:
|
|
|
|
|
|
$ hg -R client pull --remote-hidden --traceback -r be215fbb8c50
|
|
|
pulling from $TESTTMP/repo-with-hidden
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
(1 other changesets obsolete on arrival)
|
|
|
(run 'hg heads' to see heads)
|
|
|
$ hg -R client log -G --hidden -v
|
|
|
x 2:be215fbb8c50 c_Amend_Old [draft]
|
|
|
|
|
|
|
| @ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|/
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
Pulling a secret changeset is still forbidden:
|
|
|
|
|
|
secret visible:
|
|
|
|
|
|
$ hg -R client pull --remote-hidden -r 8d28cbe335f3
|
|
|
pulling from $TESTTMP/repo-with-hidden
|
|
|
abort: filtered revision '8d28cbe335f3' (not in 'served.hidden' subset)
|
|
|
[10]
|
|
|
|
|
|
secret hidden:
|
|
|
|
|
|
$ hg -R client pull --remote-hidden -r 1c6afd79eb66
|
|
|
pulling from $TESTTMP/repo-with-hidden
|
|
|
abort: filtered revision '1c6afd79eb66' (not in 'served.hidden' subset)
|
|
|
[10]
|
|
|
|
|
|
Test accessing hidden changeset through hgweb
|
|
|
---------------------------------------------
|
|
|
|
|
|
$ hg -R repo-with-hidden serve -p $HGPORT -d --pid-file hg.pid --config "experimental.server.allow-hidden-access=*" -E error.log --accesslog access.log
|
|
|
$ cat hg.pid >> $DAEMON_PIDS
|
|
|
|
|
|
Hidden changeset are hidden by default:
|
|
|
|
|
|
$ get-with-headers.py localhost:$HGPORT 'log?style=raw' | grep revision:
|
|
|
revision: 2
|
|
|
revision: 0
|
|
|
|
|
|
Hidden changeset are visible when requested:
|
|
|
|
|
|
$ get-with-headers.py localhost:$HGPORT 'log?style=raw&access-hidden=1' | grep revision:
|
|
|
revision: 3
|
|
|
revision: 2
|
|
|
revision: 1
|
|
|
revision: 0
|
|
|
|
|
|
Same check on a server that do not allow hidden access:
|
|
|
```````````````````````````````````````````````````````
|
|
|
|
|
|
$ hg -R repo-with-hidden serve -p $HGPORT1 -d --pid-file hg2.pid --config "experimental.server.allow-hidden-access=" -E error.log --accesslog access.log
|
|
|
$ cat hg2.pid >> $DAEMON_PIDS
|
|
|
|
|
|
Hidden changeset are hidden by default:
|
|
|
|
|
|
$ get-with-headers.py localhost:$HGPORT1 'log?style=raw' | grep revision:
|
|
|
revision: 2
|
|
|
revision: 0
|
|
|
|
|
|
Hidden changeset are still hidden despite being the hidden access request:
|
|
|
|
|
|
$ get-with-headers.py localhost:$HGPORT1 'log?style=raw&access-hidden=1' | grep revision:
|
|
|
revision: 2
|
|
|
revision: 0
|
|
|
|
|
|
Test --remote-hidden for http peer
|
|
|
----------------------------------
|
|
|
|
|
|
$ hg clone --pull http://localhost:$HGPORT client-http
|
|
|
requesting all changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 2 changesets with 2 changes to 1 files
|
|
|
2 new obsolescence markers
|
|
|
new changesets 5f354f46e585:c33affeb3f6b (1 drafts)
|
|
|
updating to branch default
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
$ hg -R client-http log -G --hidden -v
|
|
|
@ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
pulling an hidden changeset should fail:
|
|
|
|
|
|
$ hg -R client-http pull -r be215fbb8c50
|
|
|
pulling from http://localhost:$HGPORT/
|
|
|
abort: filtered revision 'be215fbb8c50' (not in 'served' subset)
|
|
|
[255]
|
|
|
|
|
|
pulling an hidden changeset with --remote-hidden should succeed:
|
|
|
|
|
|
$ hg -R client-http pull --remote-hidden -r be215fbb8c50
|
|
|
pulling from http://localhost:$HGPORT/
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
(1 other changesets obsolete on arrival)
|
|
|
(run 'hg heads' to see heads)
|
|
|
$ hg -R client-http log -G --hidden -v
|
|
|
x 2:be215fbb8c50 c_Amend_Old [draft]
|
|
|
|
|
|
|
| @ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|/
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
Pulling a secret changeset is still forbidden:
|
|
|
|
|
|
secret visible:
|
|
|
|
|
|
$ hg -R client-http pull --remote-hidden -r 8d28cbe335f3
|
|
|
pulling from http://localhost:$HGPORT/
|
|
|
abort: filtered revision '8d28cbe335f3' (not in 'served.hidden' subset)
|
|
|
[255]
|
|
|
|
|
|
secret hidden:
|
|
|
|
|
|
$ hg -R client-http pull --remote-hidden -r 1c6afd79eb66
|
|
|
pulling from http://localhost:$HGPORT/
|
|
|
abort: filtered revision '1c6afd79eb66' (not in 'served.hidden' subset)
|
|
|
[255]
|
|
|
|
|
|
Same check on a server that do not allow hidden access:
|
|
|
```````````````````````````````````````````````````````
|
|
|
|
|
|
$ hg clone --pull http://localhost:$HGPORT1 client-http2
|
|
|
requesting all changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 2 changesets with 2 changes to 1 files
|
|
|
2 new obsolescence markers
|
|
|
new changesets 5f354f46e585:c33affeb3f6b (1 drafts)
|
|
|
updating to branch default
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
$ hg -R client-http2 log -G --hidden -v
|
|
|
@ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
pulling an hidden changeset should fail:
|
|
|
|
|
|
$ hg -R client-http2 pull -r be215fbb8c50
|
|
|
pulling from http://localhost:$HGPORT1/
|
|
|
abort: filtered revision 'be215fbb8c50' (not in 'served' subset)
|
|
|
[255]
|
|
|
|
|
|
pulling an hidden changeset with --remote-hidden should fail too:
|
|
|
|
|
|
$ hg -R client-http2 pull --remote-hidden -r be215fbb8c50
|
|
|
pulling from http://localhost:$HGPORT1/
|
|
|
abort: filtered revision 'be215fbb8c50' (not in 'served' subset)
|
|
|
[255]
|
|
|
|
|
|
Test --remote-hidden for ssh peer
|
|
|
----------------------------------
|
|
|
|
|
|
$ hg clone --pull ssh://user@dummy/repo-with-hidden client-ssh
|
|
|
requesting all changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 2 changesets with 2 changes to 1 files
|
|
|
2 new obsolescence markers
|
|
|
new changesets 5f354f46e585:c33affeb3f6b (1 drafts)
|
|
|
updating to branch default
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
$ hg -R client-ssh log -G --hidden -v
|
|
|
@ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
Check on a server that do not allow hidden access:
|
|
|
``````````````````````````````````````````````````
|
|
|
|
|
|
pulling an hidden changeset should fail:
|
|
|
|
|
|
$ hg -R client-ssh pull -r be215fbb8c50
|
|
|
pulling from ssh://user@dummy/repo-with-hidden
|
|
|
abort: filtered revision 'be215fbb8c50' (not in 'served' subset)
|
|
|
[255]
|
|
|
|
|
|
pulling an hidden changeset with --remote-hidden should succeed:
|
|
|
|
|
|
$ hg -R client-ssh pull --remote-hidden -r be215fbb8c50
|
|
|
pulling from ssh://user@dummy/repo-with-hidden
|
|
|
remote: ignoring request to access hidden changeset by unauthorized user: * (glob)
|
|
|
abort: filtered revision 'be215fbb8c50' (not in 'served' subset)
|
|
|
[255]
|
|
|
$ hg -R client-ssh log -G --hidden -v
|
|
|
@ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
Check on a server that do allow hidden access:
|
|
|
``````````````````````````````````````````````
|
|
|
|
|
|
$ cat << EOF >> repo-with-hidden/.hg/hgrc
|
|
|
> [experimental]
|
|
|
> server.allow-hidden-access=*
|
|
|
> EOF
|
|
|
|
|
|
pulling an hidden changeset should fail:
|
|
|
|
|
|
$ hg -R client-ssh pull -r be215fbb8c50
|
|
|
pulling from ssh://user@dummy/repo-with-hidden
|
|
|
abort: filtered revision 'be215fbb8c50' (not in 'served' subset)
|
|
|
[255]
|
|
|
|
|
|
pulling an hidden changeset with --remote-hidden should succeed:
|
|
|
|
|
|
$ hg -R client-ssh pull --remote-hidden -r be215fbb8c50
|
|
|
pulling from ssh://user@dummy/repo-with-hidden
|
|
|
searching for changes
|
|
|
adding changesets
|
|
|
adding manifests
|
|
|
adding file changes
|
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
(1 other changesets obsolete on arrival)
|
|
|
(run 'hg heads' to see heads)
|
|
|
$ hg -R client-ssh log -G --hidden -v
|
|
|
x 2:be215fbb8c50 c_Amend_Old [draft]
|
|
|
|
|
|
|
| @ 1:c33affeb3f6b c_Amend_New [draft]
|
|
|
|/
|
|
|
o 0:5f354f46e585 c_Public [public]
|
|
|
|
|
|
|
|
|
Pulling a secret changeset is still forbidden:
|
|
|
|
|
|
secret visible:
|
|
|
|
|
|
$ hg -R client-ssh pull --remote-hidden -r 8d28cbe335f3
|
|
|
pulling from ssh://user@dummy/repo-with-hidden
|
|
|
abort: filtered revision '8d28cbe335f3' (not in 'served.hidden' subset)
|
|
|
[255]
|
|
|
|
|
|
secret hidden:
|
|
|
|
|
|
$ hg -R client-ssh pull --remote-hidden -r 1c6afd79eb66
|
|
|
pulling from ssh://user@dummy/repo-with-hidden
|
|
|
abort: filtered revision '1c6afd79eb66' (not in 'served.hidden' subset)
|
|
|
[255]
|
|
|
|
|
|
=============
|
|
|
Final cleanup
|
|
|
=============
|
|
|
|
|
|
$ killdaemons.py
|
|
|
|