sapling/eden/scm/tests/test-bundle2-exchange.t

1121 lines
42 KiB
Perl
Raw Normal View History

#require py2
#chg-compatible
$ disable treemanifest
Test exchange of common information using bundle2
$ getmainid() {
> hg -R main log --template '{node}\n' --rev "$1"
> }
enable obsolescence
$ cp $HGRCPATH $TESTTMP/hgrc.orig
$ cat > $TESTTMP/bundle2-pushkey-hook.sh << EOF
> echo pushkey: lock state after \"\$HG_NAMESPACE\"
> hg debuglock
> EOF
$ cat >> $HGRCPATH << EOF
> [experimental]
> evolution.createmarkers=True
> evolution.exchange=True
> bundle2-output-capture=True
> [ui]
> ssh="$PYTHON" "$TESTDIR/dummyssh"
> logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline}
> [web]
> push_ssl = false
> allow_push = *
> [phases]
> publish=False
> [hooks]
> pretxnclose.tip = hg log -r tip -T "pre-close-tip:{node|short} {phase} {bookmarks}\n"
> txnclose.tip = hg log -r tip -T "postclose-tip:{node|short} {phase} {bookmarks}\n"
> txnclose.env = sh -c "HG_LOCAL= printenv.py txnclose"
> pushkey= sh "$TESTTMP/bundle2-pushkey-hook.sh"
> EOF
The extension requires a repo (currently unused)
$ hg init main
$ cd main
$ touch a
$ hg add a
$ hg commit -m 'a'
pre-close-tip:3903775176ed draft
postclose-tip:3903775176ed draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
$ hg unbundle $TESTDIR/bundles/rebase.hg
adding changesets
adding manifests
adding file changes
added 8 changesets with 7 changes to 7 files
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NODE=cd010b8cd998f3981a5a8115f94f8da4ab506089 HG_NODE_LAST=02de42196ebee42ef284b6780a87cdc96e8eaab6 HG_PHASES_MOVED=1 HG_SOURCE=unbundle HG_TXNID=TXN:$ID$ HG_TXNNAME=unbundle
bundle:*/tests/bundles/rebase.hg HG_URL=bundle:*/tests/bundles/rebase.hg (glob)
$ cd ..
Real world exchange
=====================
Add more obsolescence information
$ hg -R main debugobsolete -d '0 0' 1111111111111111111111111111111111111111 `getmainid 9520eea781bc`
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=debugobsolete
$ hg -R main debugobsolete -d '0 0' 2222222222222222222222222222222222222222 `getmainid 24b6387c8c8c`
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=debugobsolete
clone --pull
$ hg -R main phase --public cd010b8cd998
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=phase
$ hg clone main other --pull --rev 9520eea781bc
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
1 new obsolescence markers
pre-close-tip:9520eea781bc draft
postclose-tip:9520eea781bc draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_NODE=cd010b8cd998f3981a5a8115f94f8da4ab506089 HG_NODE_LAST=9520eea781bcca16c1e15acc0ba14335a0e8e5ba HG_PHASES_MOVED=1 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_TXNNAME=clone HG_URL=file:$TESTTMP/main
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
pre-close-tip:9520eea781bc draft
postclose-tip:9520eea781bc draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=clone
$ hg -R other log -G
@ 1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com> E
|
o 0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> A
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
pull
$ hg -R main phase --public 9520eea781bc
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=phase
$ hg -R other pull -r 24b6387c8c8c
pulling from $TESTTMP/main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
1 new obsolescence markers
pre-close-tip:24b6387c8c8c draft
postclose-tip:24b6387c8c8c draft
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_NODE=24b6387c8c8cae37178880f3fa95ded3cb1cf785 HG_NODE_LAST=24b6387c8c8cae37178880f3fa95ded3cb1cf785 HG_PHASES_MOVED=1 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_TXNNAME=pull HG_URL=file:$TESTTMP/main
$ hg -R other log -G
o 2:24b6387c8c8c draft Nicolas Dumazet <nicdumz.commits@gmail.com> F
|
| @ 1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com> E
|/
o 0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> A
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
pull empty (with phase movement)
$ hg -R main phase --public 24b6387c8c8c
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=phase
$ hg -R other pull -r 24b6387c8c8c
pulling from $TESTTMP/main
no changes found
pre-close-tip:24b6387c8c8c public
postclose-tip:24b6387c8c8c public
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=0 HG_PHASES_MOVED=1 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_TXNNAME=pull HG_URL=file:$TESTTMP/main
$ hg -R other log -G
o 2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com> F
|
| @ 1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com> E
|/
o 0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> A
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
pull empty
$ hg -R other pull -r 24b6387c8c8c
pulling from $TESTTMP/main
no changes found
pre-close-tip:24b6387c8c8c public
postclose-tip:24b6387c8c8c public
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=0 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_TXNNAME=pull HG_URL=file:$TESTTMP/main
$ hg -R other log -G
o 2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com> F
|
| @ 1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com> E
|/
o 0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> A
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
add extra data to test their exchange during push
$ hg -R main bookmark --rev eea13746799a book_eea1
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R main debugobsolete -d '0 0' 3333333333333333333333333333333333333333 `getmainid eea13746799a`
pre-close-tip:02de42196ebe draft
postclose-tip:02de42196ebe draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=debugobsolete
$ hg -R main bookmark --rev 02de42196ebe book_02de
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R main debugobsolete -d '0 0' 4444444444444444444444444444444444444444 `getmainid 02de42196ebe`
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=debugobsolete
$ hg -R main bookmark --rev 42ccdea3bb16 book_42cc
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R main debugobsolete -d '0 0' 5555555555555555555555555555555555555555 `getmainid 42ccdea3bb16`
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=debugobsolete
$ hg -R main bookmark --rev 5fddd98957c8 book_5fdd
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R main debugobsolete -d '0 0' 6666666666666666666666666666666666666666 `getmainid 5fddd98957c8`
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=debugobsolete
$ hg -R main bookmark --rev 32af7686d403 book_32af
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R main debugobsolete -d '0 0' 7777777777777777777777777777777777777777 `getmainid 32af7686d403`
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=debugobsolete
$ hg -R other bookmark --rev cd010b8cd998 book_eea1
pre-close-tip:24b6387c8c8c public
postclose-tip:24b6387c8c8c public
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R other bookmark --rev cd010b8cd998 book_02de
pre-close-tip:24b6387c8c8c public
postclose-tip:24b6387c8c8c public
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R other bookmark --rev cd010b8cd998 book_42cc
pre-close-tip:24b6387c8c8c public
postclose-tip:24b6387c8c8c public
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R other bookmark --rev cd010b8cd998 book_5fdd
pre-close-tip:24b6387c8c8c public
postclose-tip:24b6387c8c8c public
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R other bookmark --rev cd010b8cd998 book_32af
pre-close-tip:24b6387c8c8c public
postclose-tip:24b6387c8c8c public
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
$ hg -R main phase --public eea13746799a
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=phase
push
$ hg -R main push other --rev eea13746799a --bookmark book_eea1
pushing to other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 0 changes to 0 files
remote: 1 new obsolescence markers
remote: pre-close-tip:eea13746799a public book_eea1
remote: postclose-tip:eea13746799a public book_eea1
remote: txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_NODE_LAST=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_PHASES_MOVED=1 HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_TXNNAME=push HG_URL=file:$TESTTMP/other
updating bookmark book_eea1
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_SOURCE=push-response HG_TXNID=TXN:$ID$ HG_TXNNAME=push-response
file:/*/$TESTTMP/other HG_URL=file:$TESTTMP/other (glob)
$ hg -R other log -G
o 3:eea13746799a public Nicolas Dumazet <nicdumz.commits@gmail.com> book_eea1 G
|\
| o 2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com> F
| |
@ | 1:9520eea781bc public Nicolas Dumazet <nicdumz.commits@gmail.com> E
|/
o 0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_02de book_32af book_42cc book_5fdd A
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
pull over ssh
$ hg -R other pull ssh://user@dummy/main -r 02de42196ebe --bookmark book_02de
pulling from ssh://user@dummy/main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
1 new obsolescence markers
updating bookmark book_02de
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_NODE=02de42196ebee42ef284b6780a87cdc96e8eaab6 HG_NODE_LAST=02de42196ebee42ef284b6780a87cdc96e8eaab6 HG_PHASES_MOVED=1 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_TXNNAME=pull HG_URL=ssh://user@dummy/main
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
pull over http
$ hg serve -R main -p 0 --port-file $TESTTMP/.port -d --pid-file=main.pid -E main-error.log
$ HGPORT=`cat $TESTTMP/.port`
$ cat main.pid >> $DAEMON_PIDS
$ hg -R other pull http://localhost:$HGPORT/ -r 42ccdea3bb16 --bookmark book_42cc
pulling from http://localhost:$HGPORT/ (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
1 new obsolescence markers
updating bookmark book_42cc
pre-close-tip:42ccdea3bb16 draft book_42cc
postclose-tip:42ccdea3bb16 draft book_42cc
txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_NODE=42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 HG_NODE_LAST=42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 HG_PHASES_MOVED=1 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_TXNNAME=pull HG_URL=http://localhost:$HGPORT/ (glob)
$ cat main-error.log
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
5555555555555555555555555555555555555555 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
push over ssh
$ hg -R main push ssh://user@dummy/other -r 5fddd98957c8 --bookmark book_5fdd
pushing to ssh://user@dummy/other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: 1 new obsolescence markers
remote: pre-close-tip:5fddd98957c8 draft book_5fdd
remote: postclose-tip:5fddd98957c8 draft book_5fdd
remote: txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_NODE_LAST=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=serve HG_TXNID=TXN:$ID$ HG_TXNNAME=serve HG_URL=remote:ssh:$LOCALIP
updating bookmark book_5fdd
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_SOURCE=push-response HG_TXNID=TXN:$ID$ HG_TXNNAME=push-response
ssh://user@dummy/other HG_URL=ssh://user@dummy/other
$ hg -R other log -G
o 6:5fddd98957c8 draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_5fdd C
|
o 5:42ccdea3bb16 draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_42cc B
|
| o 4:02de42196ebe draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_02de H
| |
| | o 3:eea13746799a public Nicolas Dumazet <nicdumz.commits@gmail.com> book_eea1 G
| |/|
| o | 2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com> F
|/ /
| @ 1:9520eea781bc public Nicolas Dumazet <nicdumz.commits@gmail.com> E
|/
o 0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_32af A
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
5555555555555555555555555555555555555555 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
6666666666666666666666666666666666666666 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
push over http
$ hg serve -R other -p 0 --port-file $TESTTMP/.port -d --pid-file=other.pid -E other-error.log
$ HGPORT2=`cat $TESTTMP/.port`
$ cat other.pid >> $DAEMON_PIDS
$ hg -R main phase --public 32af7686d403
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=phase
$ hg -R main push http://localhost:$HGPORT2/ -r 32af7686d403 --bookmark book_32af
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: 1 new obsolescence markers
remote: pre-close-tip:32af7686d403 public book_32af
remote: postclose-tip:32af7686d403 public book_32af
remote: txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_NEW_OBSMARKERS=1 HG_NODE=32af7686d403cf45b5d95f2d70cebea587ac806a HG_NODE_LAST=32af7686d403cf45b5d95f2d70cebea587ac806a HG_PHASES_MOVED=1 HG_SOURCE=serve HG_TXNID=TXN:$ID$ HG_TXNNAME=serve HG_URL=remote:http:$LOCALIP: (glob)
updating bookmark book_32af
pre-close-tip:02de42196ebe draft book_02de
postclose-tip:02de42196ebe draft book_02de
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_SOURCE=push-response HG_TXNID=TXN:$ID$ HG_TXNNAME=push-response
http://localhost:$HGPORT2/ HG_URL=http://localhost:$HGPORT2/ (glob)
$ cat other-error.log
Check final content.
$ hg -R other log -G
o 7:32af7686d403 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_32af D
|
o 6:5fddd98957c8 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_5fdd C
|
o 5:42ccdea3bb16 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_42cc B
|
| o 4:02de42196ebe draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_02de H
| |
| | o 3:eea13746799a public Nicolas Dumazet <nicdumz.commits@gmail.com> book_eea1 G
| |/|
| o | 2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com> F
|/ /
| @ 1:9520eea781bc public Nicolas Dumazet <nicdumz.commits@gmail.com> E
|/
o 0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> A
$ hg -R other debugobsolete
1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
5555555555555555555555555555555555555555 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
6666666666666666666666666666666666666666 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
7777777777777777777777777777777777777777 32af7686d403cf45b5d95f2d70cebea587ac806a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
(check that no 'pending' files remain)
$ ls -1 other/.hg/store/phaseroots*
other/.hg/store/phaseroots
$ ls -1 other/.hg/store/00changelog.i*
other/.hg/store/00changelog.i
Error Handling
==============
Check that errors are properly returned to the client during push.
Setting up
$ cat > failpush.py << EOF
> """A small extension that makes push fails when using bundle2
>
> used to test error handling in bundle2
> """
>
> from edenscm.mercurial import error
> from edenscm.mercurial import bundle2
> from edenscm.mercurial import exchange
> from edenscm.mercurial import extensions
> from edenscm.mercurial import registrar
> cmdtable = {}
> command = registrar.command(cmdtable)
>
> configtable = {}
> configitem = registrar.configitem(configtable)
> configitem('failpush', 'reason',
> default=None,
> )
>
> def _pushbundle2failpart(pushop, bundler):
> reason = pushop.ui.config('failpush', 'reason')
> part = None
> if reason == 'abort':
> bundler.newpart('test:abort')
> if reason == 'unknown':
> bundler.newpart('test:unknown')
>
> @bundle2.parthandler("test:abort")
> def handleabort(op, part):
> raise error.Abort('Abandon ship!', hint="don't panic")
>
> def uisetup(ui):
> exchange.b2partsgenmapping['failpart'] = _pushbundle2failpart
> exchange.b2partsgenorder.insert(0, 'failpart')
>
> EOF
$ cd main
$ hg up tip
3 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo 'I' > I
$ hg add I
$ hg ci -m 'I'
pre-close-tip:e7ec4e813ba6 draft
postclose-tip:e7ec4e813ba6 draft
txnclose hook: HG_HOOKNAME=txnclose.env HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
$ hg id
e7ec4e813ba6
$ cd ..
$ cat << EOF >> $HGRCPATH
> [extensions]
> failpush=$TESTTMP/failpush.py
> EOF
$ killdaemons.py
$ hg serve -R other -p 0 --port-file $TESTTMP/.port -d --pid-file=other.pid -E other-error.log
$ HGPORT2=`cat $TESTTMP/.port`
$ cat other.pid >> $DAEMON_PIDS
Doing the actual push: Abort error
$ cat << EOF >> $HGRCPATH
> [failpush]
> reason = abort
> EOF
$ hg -R main push other -r e7ec4e813ba6
pushing to other
searching for changes
abort: Abandon ship!
(don't panic)
[255]
$ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
pushing to ssh://user@dummy/other
searching for changes
remote: Abandon ship!
remote: (don't panic)
abort: push failed on remote
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
remote: Abandon ship!
remote: (don't panic)
abort: push failed on remote
[255]
Doing the actual push: unknown mandatory parts
$ cat << EOF >> $HGRCPATH
> [failpush]
> reason = unknown
> EOF
$ hg -R main push other -r e7ec4e813ba6
pushing to other
searching for changes
abort: missing support for test:unknown
[255]
$ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
pushing to ssh://user@dummy/other
searching for changes
abort: missing support for test:unknown
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
abort: missing support for test:unknown
[255]
Doing the actual push: hook abort
$ cat << EOF >> $HGRCPATH
> [failpush]
> reason =
> [hooks]
> pretxnclose.failpush = sh -c "echo 'You shall not pass!'; false"
> txnabort.failpush = sh -c "echo 'Cleaning up the mess...'"
> EOF
$ killdaemons.py
$ hg serve -R other -p 0 --port-file $TESTTMP/.port -d --pid-file=other.pid -E other-error.log
$ HGPORT2=`cat $TESTTMP/.port`
$ cat other.pid >> $DAEMON_PIDS
$ hg -R main push other -r e7ec4e813ba6
pushing to other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: pre-close-tip:e7ec4e813ba6 draft
remote: You shall not pass!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
abort: pretxnclose.failpush hook exited with status 1
[255]
$ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
pushing to ssh://user@dummy/other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: pre-close-tip:e7ec4e813ba6 draft
remote: You shall not pass!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pretxnclose.failpush hook exited with status 1
abort: push failed on remote
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: pre-close-tip:e7ec4e813ba6 draft
remote: You shall not pass!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pretxnclose.failpush hook exited with status 1
abort: push failed on remote
[255]
(check that no 'pending' files remain)
$ ls -1 other/.hg/store/phaseroots*
other/.hg/store/phaseroots
$ ls -1 other/.hg/store/00changelog.i*
other/.hg/store/00changelog.i
Check error from hook during the unbundling process itself
$ cat << EOF >> $HGRCPATH
> pretxnchangegroup = sh -c "echo 'Fail early!'; false"
> EOF
$ killdaemons.py # reload http config
$ hg serve -R other -p 0 --port-file $TESTTMP/.port -d --pid-file=other.pid -E other-error.log
$ HGPORT2=`cat $TESTTMP/.port`
$ cat other.pid >> $DAEMON_PIDS
$ hg -R main push other -r e7ec4e813ba6
pushing to other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: Fail early!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
abort: pretxnchangegroup hook exited with status 1
[255]
$ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
pushing to ssh://user@dummy/other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: Fail early!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pretxnchangegroup hook exited with status 1
abort: push failed on remote
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: Fail early!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pretxnchangegroup hook exited with status 1
abort: push failed on remote
[255]
Check output capture control.
(should be still forced for http, disabled for local and ssh)
$ cat >> $HGRCPATH << EOF
> [experimental]
> bundle2-output-capture=False
> EOF
$ hg -R main push other -r e7ec4e813ba6
pushing to other
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Fail early!
transaction abort!
Cleaning up the mess...
rollback completed
abort: pretxnchangegroup hook exited with status 1
[255]
$ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
pushing to ssh://user@dummy/other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: Fail early!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pretxnchangegroup hook exited with status 1
abort: push failed on remote
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: Fail early!
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pretxnchangegroup hook exited with status 1
abort: push failed on remote
[255]
Check abort from mandatory pushkey
$ cat > mandatorypart.py << EOF
> from edenscm.mercurial import exchange
> from edenscm.mercurial import pushkey
> from edenscm.mercurial import node
> from edenscm.mercurial import error
> @exchange.b2partsgenerator('failingpuskey')
> def addfailingpushey(pushop, bundler):
> part = bundler.newpart('pushkey')
> part.addparam('namespace', 'phases')
> part.addparam('key', pushop.repo['cd010b8cd998'].hex())
> part.addparam('old', str(0)) # successful update
> part.addparam('new', str(0))
> def fail(pushop, exc):
> raise error.Abort('Correct phase push failed (because hooks)')
> pushop.pkfailcb[part.id] = fail
> EOF
$ cat >> $HGRCPATH << EOF
> [hooks]
> pretxnchangegroup=
> pretxnclose.failpush=
> prepushkey.failpush = sh -c "echo 'do not push the key !'; false"
> [extensions]
> mandatorypart=$TESTTMP/mandatorypart.py
> EOF
$ "$TESTDIR/killdaemons.py" $DAEMON_PIDS # reload http config
$ hg serve -R other -p 0 --port-file $TESTTMP/.port -d --pid-file=other.pid -E other-error.log
$ HGPORT2=`cat $TESTTMP/.port`
$ cat other.pid >> $DAEMON_PIDS
(Failure from a hook)
$ hg -R main push other -r e7ec4e813ba6
pushing to other
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
do not push the key !
pushkey-abort: prepushkey.failpush hook exited with status 1
transaction abort!
Cleaning up the mess...
rollback completed
abort: Correct phase push failed (because hooks)
[255]
$ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
pushing to ssh://user@dummy/other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: do not push the key !
remote: pushkey-abort: prepushkey.failpush hook exited with status 1
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
abort: Correct phase push failed (because hooks)
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: do not push the key !
remote: pushkey-abort: prepushkey.failpush hook exited with status 1
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
abort: Correct phase push failed (because hooks)
[255]
(Failure from a the pushkey)
$ cat > mandatorypart.py << EOF
> from edenscm.mercurial import exchange
> from edenscm.mercurial import pushkey
> from edenscm.mercurial import node
> from edenscm.mercurial import error
> @exchange.b2partsgenerator('failingpuskey')
> def addfailingpushey(pushop, bundler):
> part = bundler.newpart('pushkey')
> part.addparam('namespace', 'phases')
> part.addparam('key', pushop.repo['cd010b8cd998'].hex())
> part.addparam('old', str(4)) # will fail
> part.addparam('new', str(3))
> def fail(pushop, exc):
> raise error.Abort('Clown phase push failed')
> pushop.pkfailcb[part.id] = fail
> EOF
$ cat >> $HGRCPATH << EOF
> [hooks]
> prepushkey.failpush =
> EOF
$ "$TESTDIR/killdaemons.py" $DAEMON_PIDS # reload http config
$ hg serve -R other -p 0 --port-file $TESTTMP/.port -d --pid-file=other.pid -E other-error.log
$ HGPORT2=`cat $TESTTMP/.port`
$ cat other.pid >> $DAEMON_PIDS
$ hg -R main push other -r e7ec4e813ba6
pushing to other
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
transaction abort!
Cleaning up the mess...
rollback completed
pushkey: lock state after "phases"
lock: free
wlock: free
undolog/lock: absent
prefetchlock: free
infinitepushbackup.lock: free
abort: Clown phase push failed
[255]
$ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
pushing to ssh://user@dummy/other
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pushkey: lock state after "phases"
remote: lock: free
remote: wlock: free
remote: undolog/lock: absent
remote: prefetchlock: free
remote: infinitepushbackup.lock: free
abort: Clown phase push failed
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
pushing to http://localhost:$HGPORT2/ (glob)
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: transaction abort!
remote: Cleaning up the mess...
remote: rollback completed
remote: pushkey: lock state after "phases"
remote: lock: free
remote: wlock: free
remote: undolog/lock: absent
remote: prefetchlock: free
remote: infinitepushbackup.lock: free
abort: Clown phase push failed
[255]
Test lazily acquiring the lock during unbundle
$ cp $TESTTMP/hgrc.orig $HGRCPATH
$ cat >> $HGRCPATH <<EOF
> [ui]
> ssh="$PYTHON" "$TESTDIR/dummyssh"
> EOF
$ cat >> $TESTTMP/locktester.py <<EOF
> import os
> from edenscm.mercurial import extensions, bundle2, util
> def checklock(orig, repo, *args, **kwargs):
> if repo.svfs.lexists("lock"):
> raise util.Abort("Lock should not be taken")
> return orig(repo, *args, **kwargs)
> def extsetup(ui):
> extensions.wrapfunction(bundle2, 'processbundle', checklock)
> EOF
$ hg init lazylock
$ cat >> lazylock/.hg/hgrc <<EOF
> [extensions]
> locktester=$TESTTMP/locktester.py
> EOF
$ hg clone -q ssh://user@dummy/lazylock lazylockclient
$ cd lazylockclient
$ touch a && hg ci -Aqm a
$ hg push
pushing to ssh://user@dummy/lazylock
searching for changes
remote: Lock should not be taken
abort: push failed on remote
[255]
$ cat >> ../lazylock/.hg/hgrc <<EOF
> [experimental]
> bundle2lazylocking=True
> EOF
$ hg push
pushing to ssh://user@dummy/lazylock
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
$ cd ..
Servers can disable bundle1 for clone/pull operations
$ killdaemons.py
$ hg init bundle2onlyserver
$ cd bundle2onlyserver
$ cat > .hg/hgrc << EOF
> [server]
> bundle1.pull = false
> EOF
$ touch foo
$ hg -q commit -A -m initial
$ hg serve -p 0 --port-file $TESTTMP/.port -d --pid-file=hg.pid
$ HGPORT=`cat $TESTTMP/.port`
$ cat hg.pid >> $DAEMON_PIDS
$ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT/ not-bundle2
requesting all changes
abort: remote error:
incompatible Mercurial client; bundle2 required
(see https://www.mercurial-scm.org/wiki/IncompatibleClient)
[255]
$ killdaemons.py
$ cd ..
bundle1 can still pull non-generaldelta repos when generaldelta bundle1 disabled
$ hg --config format.usegeneraldelta=false init notgdserver
$ cd notgdserver
$ cat > .hg/hgrc << EOF
> [server]
> bundle1gd.pull = false
> [format]
> allowbundle1=True
> EOF
$ touch foo
$ hg -q commit -A -m initial
$ hg serve -p 0 --port-file $TESTTMP/.port -d --pid-file=hg.pid
$ HGPORT=`cat $TESTTMP/.port`
$ cat hg.pid >> $DAEMON_PIDS
$ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT/ not-bundle2-1
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ killdaemons.py
$ cd ../bundle2onlyserver
bundle1 pull can be disabled for generaldelta repos only
$ cat > .hg/hgrc << EOF
> [server]
> bundle1gd.pull = false
> [format]
> allowbundle1=True
> EOF
$ hg serve -p 0 --port-file $TESTTMP/.port -d --pid-file=hg.pid
$ HGPORT=`cat $TESTTMP/.port`
$ cat hg.pid >> $DAEMON_PIDS
$ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT/ not-bundle2
requesting all changes
abort: remote error:
incompatible Mercurial client; bundle2 required
(see https://www.mercurial-scm.org/wiki/IncompatibleClient)
[255]
$ killdaemons.py
Verify the global server.bundle1 option works
$ cd ..
$ cat > bundle2onlyserver/.hg/hgrc << EOF
> [server]
> bundle1 = false
> [format]
> allowbundle1=True
> EOF
$ hg serve -R bundle2onlyserver -p 0 --port-file $TESTTMP/.port -d --pid-file=hg.pid
$ HGPORT=`cat $TESTTMP/.port`
$ cat hg.pid >> $DAEMON_PIDS
$ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT not-bundle2
requesting all changes
abort: remote error:
incompatible Mercurial client; bundle2 required
(see https://www.mercurial-scm.org/wiki/IncompatibleClient)
[255]
$ killdaemons.py
tests_: simplify bundle2 requirement testing Differential Revision: https://phabricator.intern.facebook.com/D4599415 (grafted from 35efb60b54b45e4bf8a281da35377ceabd9a2d0d) (grafted from c976227665e29759c3bfd62a78b653815999f33c) (grafted from ce81c51c90c6a7e67377b8368ff056be747ba808) (grafted from f8ebd7782719ffb9f6c9bbdc740af4d628bc4c38) (grafted from b683d8dc9677c2e4f24395f2ae849129bd4d6c81) (grafted from 98300e5ba307c80f257e9d28b3afa7ef30d9a109) (grafted from 6baa745cb3ea1a59c5e194b28d1db7e6a14da8fa) (grafted from 0bd1e681e370164b2b58ed6329dcceab8a45ba1a) (grafted from b88e051e45b3b34eebfe68b579d40e0848dd9164) (grafted from d7d3ea27b8e834ca6a7ee86d67109f68dff8b627) (grafted from 07f80547629b090986e880005f17af3470927034) (grafted from f3ecb29d9b68d2adcf28a1986c070ceb85da8421) (grafted from 23c77af0834657915d69f06623b8d831fc03dfbc) (grafted from 6c0111953ffaacad3deb12f81bf05454f4c8bfc1) (grafted from e6564dd98f0ab63736ba70500d60db0def7025f8) (grafted from 3228fe1cc79cea64fa4cc674bf71f24123433ec7) (grafted from 5a8c522c3db09d88bc6d45393c40256139ab4d42) (grafted from 8d3f1b10a2bcda17dc55cdc97712bdc456acc406) (grafted from 1f994f75a2a4f57c0f19981f71254e22963eaa04) (grafted from 9bf91f3db246c40475f57657d82bd3f50e571e84) (grafted from 2f88c5c88fd55b48fc0c30aa2abd701b2b7b9d7d) (grafted from fab2b4f5d6e855c657f69dccb08f720bab4a82b1) (grafted from e2fc694c13c74f7948680d653568e62d7010c4f4) (grafted from d474fcb2eb58404a689024cc503abe28136c8395) (grafted from 8b2233600993b96119186ddbfb16232c48247fe1) (grafted from ba5486b8c838e72c35cb437cbdf0add5b2100c6b) (grafted from 42699d89bd0da2e204075246eb4c27baa642fc2a) (grafted from 02d0e17b6b7f938ba58f26d84191ef347bcdbd17) (grafted from 9f9bba61993924c1c96a5dd15c0c50895ec8e525) (grafted from c3bc9b3844d852ba7365574d3fbd4aa8e2763aa0) (grafted from fc5d31337891e9eb218f100b177f8ead2f6353da) (grafted from baad4585f877267a3264dc4c70e8cd75bfc6688e) (grafted from 6d46603cea8fc9d04628817ae1e239b38e62ce62) (grafted from c54d6c0b3b3dae086b8ad186e178a1e137b57cae) (grafted from 1755e00c824c7d5b30a7daff573c3ab1e2f1fd2c) (grafted from 81826a9db3f5f9c8e760d2b09afb06d9f74a1609) (grafted from 73bce05fdb8cb8f8739bd2c90741ac7d422e24a4) (grafted from c942744744e071464d3a476e57fd74f922fca497) (grafted from 77b797a46b52249b26da6d30a0c63e381d1af0fe) (grafted from 9b09bef68b1aa1ef3804aec330e793dcc7ada944) (grafted from fefea5a4a24f0c8219b4b0e2b0cc70b4dfadfde2) (grafted from 3428e6ab54999e70b38a5ee62291c8774bae7e4a) (grafted from dd57d190fa75589d800beed188c5a381678cca3c) (grafted from 9005ba0d5e6420ed8d048c08fc38a9682e536a26) (grafted from daeb4bf87b68309c4c3c608853affe2adeb9fcbd) (grafted from 6ad984397b22666ecebc2ff737b0d52ffb95b9b7) (grafted from bd1f17920c18d88b6c4dd451f76699f6f665bc32) (grafted from 31a92a48004ab6a4bfc389f674cacf549703e2b9) (grafted from 7e80636f1529b8902292980912586f1db8598a83) (grafted from 55ecf6a9f9bc89fd0330c4684f225e213be18033) (grafted from 3361f627a0b8cb7666a529494ed80a0e1d7a365c) (grafted from f51abda49b2d33a936567b786ce785c97e4b9c64) (grafted from 5c01ed3bf394351e116fcece1fbd9e1b19f57ea4) (grafted from 9503cdb335a95950235b7871978bcb6cb3e87222) (grafted from 220d31489a377997e71d5766f9f29b30fd1662e1) (grafted from 97483c98cf95113e95d03bf69f3307f92ef232a4) (grafted from b3e9f8f43b4dd76422c20234acf76ec82a9c5f5b) (grafted from 831d9f1b2940b6944fc1015c57f348a22de7a149) (grafted from 051e1081a45e85944ea4414174a452e208904371) (grafted from 9fb7c4c494166dee97bb04826cf71b0fa774cd2b) (grafted from bfb4cb9c08c582323ceb82eb5cd2bcaeaf70329c) (grafted from ab548e4f700a65bd24fbbbdb43f971eb5da73be5) (grafted from 8870c382cfecbcbd4f8cec3ca0cb8759a43cf31c) (grafted from 8e09e732b846b42beb49866d3785572df89f1e38) (grafted from 951064f2a2980a00d085fce0d207c0225447b5d5) (grafted from fce58e29903c2ef95b0481c11d59e5ef4fb56d15) (grafted from 391f610601eeb542b9aa2bed3f541609772b8599) (grafted from 681ea78b8ae1c29589a49a5bb74e0f3dff30e1d7) (grafted from add76a9d94ee5d7b829be52458d1dfb65585c2d3) (grafted from 475ae856da634e53637131717723fe895be0def6) (grafted from b22d9651b8a7957c8275301d79f6ba62fc5a38f4) (grafted from 3bf8c57dfd2fb432f4d499014dd9ab4ced26133d) (grafted from 47718758ce30722c7a6e4d4dc324bdef20d45163) (grafted from 59270eeea34cc381933ce50600983819e8a35794) (grafted from 5397fdfa10d831ba358925e4a32faa23fed18173) (grafted from de9cc0df3d097d25a8a218010e4a8370373f5068) (grafted from e7f5a21e9dd2f2a4527943f5dad0d597c0f2b7a4) (grafted from 5c383ebe8f57ccabf1ede74905a951631c7e32de) (grafted from bf4ad8ffd761b575a843fe5f8370fb4a5c1a2eb9) (grafted from 8523ff03bfa8708eefb667d9df64fba58e5a9f8c) (grafted from 5220db13df5a745d113ebba89185ac42f4f890d1) (grafted from 8a66c7352d03e545e8cbe80a1f84122624f2035c) (grafted from 94cf7cdbce472e0694582b18acd6f2fc3f46e839) (grafted from 29575e1ce294a235a1df9136a6b807b8947a20cd) (grafted from d23b69b215e4201e90b600797b41ab362e7c7044) (grafted from 386af1481e70f160f6b3d0e08ba8934372446b68) (grafted from fc69c78396e9ab15fd961540204db004db933799) (grafted from 8a8e35573518b72937af626999b885c6f6491683) (grafted from 9fb083f031e7358fdb73ef6fac5278f841f2b084) (grafted from aa20fd817539bdd8d15adb340ef714121dd273b2) (grafted from 2b68df547651d1727b4320f2ffbb8fded3ab49ac) (grafted from ff3bf5623756d977c88a25d546b34160229177d3) (grafted from fd5f39d43bac7fa2c8a1e5785e3dc060f539277c) (grafted from 8871ae64560384cf7693a5c32333b90e6774ba2a) (grafted from 3a01e81a1a78138af5892129f447bee53fb85a73) (grafted from ca1bc04c027005d42b4dc5eee52c3874a13790df) (grafted from c68f7302ce65f055e205ed701490529571aaaa32) (grafted from c7e264107eb95c8ab01804699775374b43bcbd84) (grafted from 3748e7898899c994a4b5019b66f705e2c7a8d2eb) (grafted from fe2d08b837334f9b3b1bb3a18a28f010a02c0340) (grafted from dd29c6c56f0de76550d2f61671eb05da6a03fbc3)
2018-01-03 16:35:56 +03:00
$ hg --config devel.legacy.exchange=bundle1 clone ssh://user@dummy/bundle2onlyserver not-bundle2-ssh 2>&1 | grep "remote:"
remote: abort: incompatible Mercurial client; bundle2 required
remote: (see https://www.mercurial-scm.org/wiki/IncompatibleClient)
$ cat > bundle2onlyserver/.hg/hgrc << EOF
> [server]
> bundle1gd = false
> EOF
$ hg serve -R bundle2onlyserver -p 0 --port-file $TESTTMP/.port -d --pid-file=hg.pid
$ HGPORT=`cat $TESTTMP/.port`
$ cat hg.pid >> $DAEMON_PIDS
$ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT/ not-bundle2
requesting all changes
abort: remote error:
incompatible Mercurial client; bundle2 required
(see https://www.mercurial-scm.org/wiki/IncompatibleClient)
[255]
$ killdaemons.py
$ cd notgdserver
$ cat > .hg/hgrc << EOF
> [server]
> bundle1gd = false
> [format]
> allowbundle1=True
> EOF
$ hg serve -p 0 --port-file $TESTTMP/.port -d --pid-file=hg.pid
$ HGPORT=`cat $TESTTMP/.port`
$ cat hg.pid >> $DAEMON_PIDS
$ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT/ not-bundle2-2
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ killdaemons.py
$ cd ../bundle2onlyserver
Verify bundle1 pushes can be disabled
$ cat > .hg/hgrc << EOF
> [server]
> bundle1.push = false
> [web]
> allow_push = *
> push_ssl = false
> EOF
$ hg serve -p 0 --port-file $TESTTMP/.port -d --pid-file=hg.pid -E error.log
$ HGPORT=`cat $TESTTMP/.port`
$ cat hg.pid >> $DAEMON_PIDS
$ cd ..
$ hg clone http://localhost:$HGPORT bundle2-only
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd bundle2-only
$ echo commit > foo
$ hg commit -m commit
$ hg --config devel.legacy.exchange=bundle1 push
pushing to http://localhost:$HGPORT/ (glob)
searching for changes
devel-warn: using deprecated bundlev1 format
at: */changegroup.py:* (makechangegroup) (glob)
abort: remote error:
incompatible Mercurial client; bundle2 required
(see https://www.mercurial-scm.org/wiki/IncompatibleClient)
[255]
(also check with ssh)
$ hg --config devel.legacy.exchange=bundle1 push ssh://user@dummy/bundle2onlyserver
pushing to ssh://user@dummy/bundle2onlyserver
searching for changes
devel-warn: using deprecated bundlev1 format
at: */changegroup.py:* (makechangegroup) (glob)
remote: abort: incompatible Mercurial client; bundle2 required
remote: (see https://www.mercurial-scm.org/wiki/IncompatibleClient)
[1]
$ hg push
pushing to http://localhost:$HGPORT/ (glob)
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files