test-http.t
555 lines
| 22.2 KiB
| text/troff
|
Tads3Lexer
/ tests / test-http.t
|
r31936 | #require killdaemons serve | ||
|
r12446 | |||
$ hg init test | ||||
$ cd test | ||||
$ echo foo>foo | ||||
$ mkdir foo.d foo.d/bAr.hg.d foo.d/baR.d.hg | ||||
$ echo foo>foo.d/foo | ||||
$ echo bar>foo.d/bAr.hg.d/BaR | ||||
$ echo bar>foo.d/baR.d.hg/bAR | ||||
$ hg commit -A -m 1 | ||||
adding foo | ||||
adding foo.d/bAr.hg.d/BaR | ||||
adding foo.d/baR.d.hg/bAR | ||||
adding foo.d/foo | ||||
|
r13445 | $ hg serve -p $HGPORT -d --pid-file=../hg1.pid -E ../error.log | ||
|
r28549 | $ hg serve --config server.uncompressed=False -p $HGPORT1 -d --pid-file=../hg2.pid | ||
|
r12446 | |||
Test server address cannot be reused | ||||
|
r17023 | $ hg serve -p $HGPORT1 2>&1 | ||
|
r35233 | abort: cannot start server at 'localhost:$HGPORT1': $EADDRINUSE$ | ||
|
r17023 | [255] | ||
|
r35233 | |||
|
r12446 | $ cd .. | ||
$ cat hg1.pid hg2.pid >> $DAEMON_PIDS | ||||
clone via stream | ||||
|
r34394 | $ hg clone --stream http://localhost:$HGPORT/ copy 2>&1 | ||
|
r12446 | streaming all changes | ||
6 files to transfer, 606 bytes of data | ||||
|
r14023 | transferred * bytes in * seconds (*/sec) (glob) | ||
|
r23116 | searching for changes | ||
no changes found | ||||
|
r12446 | updating to branch default | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg verify -R copy | ||||
checking changesets | ||||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
4 files, 1 changesets, 4 total revisions | ||||
try to clone via stream, should use pull instead | ||||
|
r34394 | $ hg clone --stream http://localhost:$HGPORT1/ copy2 | ||
|
r32259 | warning: stream clone requested but server has them disabled | ||
|
r12446 | requesting all changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
|
r34662 | new changesets 8b6053c928fe | ||
|
r12446 | updating to branch default | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r32258 | try to clone via stream but missing requirements, so should use pull instead | ||
$ cat > $TESTTMP/removesupportedformat.py << EOF | ||||
> from mercurial import localrepo | ||||
> def extsetup(ui): | ||||
> localrepo.localrepository.supportedformats.remove('generaldelta') | ||||
> EOF | ||||
|
r34394 | $ hg clone --config extensions.rsf=$TESTTMP/removesupportedformat.py --stream http://localhost:$HGPORT/ copy3 | ||
|
r32259 | warning: stream clone requested but client is missing requirements: generaldelta | ||
(see https://www.mercurial-scm.org/wiki/MissingRequirement for more information) | ||||
|
r32258 | requesting all changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
|
r34662 | new changesets 8b6053c928fe | ||
|
r32258 | updating to branch default | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r12446 | clone via pull | ||
$ hg clone http://localhost:$HGPORT1/ copy-pull | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
|
r34662 | new changesets 8b6053c928fe | ||
|
r12446 | updating to branch default | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg verify -R copy-pull | ||||
checking changesets | ||||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
4 files, 1 changesets, 4 total revisions | ||||
$ cd test | ||||
$ echo bar > bar | ||||
$ hg commit -A -d '1 0' -m 2 | ||||
adding bar | ||||
$ cd .. | ||||
|
r17342 | clone over http with --update | ||
$ hg clone http://localhost:$HGPORT1/ updated --update 0 | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 5 changes to 5 files | ||||
|
r34662 | new changesets 8b6053c928fe:5fed3813f7f5 | ||
|
r17342 | updating to branch default | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg log -r . -R updated | ||||
changeset: 0:8b6053c928fe | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 1 | ||||
$ rm -rf updated | ||||
|
r14161 | incoming via HTTP | ||
$ hg clone http://localhost:$HGPORT1/ --rev 0 partial | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
|
r34662 | new changesets 8b6053c928fe | ||
|
r14161 | updating to branch default | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd partial | ||||
$ touch LOCAL | ||||
$ hg ci -qAm LOCAL | ||||
$ hg incoming http://localhost:$HGPORT1/ --template '{desc}\n' | ||||
comparing with http://localhost:$HGPORT1/ | ||||
searching for changes | ||||
2 | ||||
$ cd .. | ||||
|
r12446 | pull | ||
$ cd copy-pull | ||||
|
r30234 | $ cat >> .hg/hgrc <<EOF | ||
> [hooks] | ||||
> changegroup = sh -c "printenv.py changegroup" | ||||
> EOF | ||||
|
r12446 | $ hg pull | ||
|
r12643 | pulling from http://localhost:$HGPORT1/ | ||
|
r12446 | searching for changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
|
r34662 | new changesets 5fed3813f7f5 | ||
|
r31747 | changegroup hook: HG_HOOKNAME=changegroup HG_HOOKTYPE=changegroup HG_NODE=5fed3813f7f5e1824344fdc9cf8f63bb662c292d HG_NODE_LAST=5fed3813f7f5e1824344fdc9cf8f63bb662c292d HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=http://localhost:$HGPORT1/ | ||
|
r12446 | (run 'hg update' to get a working copy) | ||
$ cd .. | ||||
|
r13445 | |||
clone from invalid URL | ||||
$ hg clone http://localhost:$HGPORT/bad | ||||
abort: HTTP Error 404: Not Found | ||||
[255] | ||||
|
r15026 | test http authentication | ||
|
r16361 | + use the same server to test server side streaming preference | ||
|
r15026 | |||
$ cd test | ||||
$ cat << EOT > userpass.py | ||||
> import base64 | ||||
> from mercurial.hgweb import common | ||||
> def perform_authentication(hgweb, req, op): | ||||
|
r36893 | > auth = req.headers.get('Authorization') | ||
|
r15026 | > if not auth: | ||
> raise common.ErrorResponse(common.HTTP_UNAUTHORIZED, 'who', | ||||
> [('WWW-Authenticate', 'Basic Realm="mercurial"')]) | ||||
|
r17342 | > if base64.b64decode(auth.split()[1]).split(':', 1) != ['user', 'pass']: | ||
|
r15026 | > raise common.ErrorResponse(common.HTTP_FORBIDDEN, 'no') | ||
> def extsetup(): | ||||
> common.permhooks.insert(0, perform_authentication) | ||||
> EOT | ||||
|
r28549 | $ hg serve --config extensions.x=userpass.py -p $HGPORT2 -d --pid-file=pid \ | ||
|
r20385 | > --config server.preferuncompressed=True \ | ||
> --config web.push_ssl=False --config web.allow_push=* -A ../access.log | ||||
|
r15026 | $ cat pid >> $DAEMON_PIDS | ||
|
r20291 | $ cat << EOF > get_pass.py | ||
> import getpass | ||||
> def newgetpass(arg): | ||||
> return "pass" | ||||
> getpass.getpass = newgetpass | ||||
> EOF | ||||
|
r17342 | $ hg id http://localhost:$HGPORT2/ | ||
|
r20291 | abort: http authorization required for http://localhost:$HGPORT2/ | ||
|
r15026 | [255] | ||
|
r20291 | $ hg id http://localhost:$HGPORT2/ | ||
abort: http authorization required for http://localhost:$HGPORT2/ | ||||
|
r15026 | [255] | ||
|
r20291 | $ hg id --config ui.interactive=true --config extensions.getpass=get_pass.py http://user@localhost:$HGPORT2/ | ||
http authorization required for http://localhost:$HGPORT2/ | ||||
realm: mercurial | ||||
user: user | ||||
password: 5fed3813f7f5 | ||||
|
r15026 | $ hg id http://user:pass@localhost:$HGPORT2/ | ||
5fed3813f7f5 | ||||
|
r17342 | $ echo '[auth]' >> .hg/hgrc | ||
|
r15026 | $ echo 'l.schemes=http' >> .hg/hgrc | ||
$ echo 'l.prefix=lo' >> .hg/hgrc | ||||
$ echo 'l.username=user' >> .hg/hgrc | ||||
$ echo 'l.password=pass' >> .hg/hgrc | ||||
|
r17342 | $ hg id http://localhost:$HGPORT2/ | ||
|
r15026 | 5fed3813f7f5 | ||
|
r17342 | $ hg id http://localhost:$HGPORT2/ | ||
|
r15026 | 5fed3813f7f5 | ||
|
r17342 | $ hg id http://user@localhost:$HGPORT2/ | ||
|
r15026 | 5fed3813f7f5 | ||
|
r16361 | $ hg clone http://user:pass@localhost:$HGPORT2/ dest 2>&1 | ||
streaming all changes | ||||
7 files to transfer, 916 bytes of data | ||||
transferred * bytes in * seconds (*/sec) (glob) | ||||
|
r23116 | searching for changes | ||
no changes found | ||||
|
r16361 | updating to branch default | ||
5 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r23546 | --pull should override server's preferuncompressed | ||
$ hg clone --pull http://user:pass@localhost:$HGPORT2/ dest-pull 2>&1 | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 5 changes to 5 files | ||||
|
r34662 | new changesets 8b6053c928fe:5fed3813f7f5 | ||
|
r23546 | updating to branch default | ||
5 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r16361 | |||
|
r17342 | $ hg id http://user2@localhost:$HGPORT2/ | ||
|
r20291 | abort: http authorization required for http://localhost:$HGPORT2/ | ||
|
r15026 | [255] | ||
$ hg id http://user:pass2@localhost:$HGPORT2/ | ||||
abort: HTTP Error 403: no | ||||
[255] | ||||
|
r20385 | |||
$ hg -R dest tag -r tip top | ||||
$ hg -R dest push http://user:pass@localhost:$HGPORT2/ | ||||
pushing to http://user:***@localhost:$HGPORT2/ | ||||
searching for changes | ||||
remote: adding changesets | ||||
remote: adding manifests | ||||
remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | ||||
$ hg rollback -q | ||||
|
r35716 | $ hg -R dest push http://user:pass@localhost:$HGPORT2/ --debug --config devel.debug.peer-request=yes | ||
|
r35714 | pushing to http://user:***@localhost:$HGPORT2/ | ||
using http://localhost:$HGPORT2/ | ||||
http auth: user user, password **** | ||||
sending capabilities command | ||||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=capabilities | ||
|
r36772 | http auth: user user, password **** | ||
|
r35716 | devel-peer-request: finished in *.???? seconds (200) (glob) | ||
|
r35714 | query 1; heads | ||
|
r36963 | devel-peer-request: batched-content | ||
devel-peer-request: - heads (0 arguments) | ||||
devel-peer-request: - known (1 arguments) | ||||
|
r35714 | sending batch command | ||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=batch | ||
devel-peer-request: Vary X-HgArg-1,X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: 68 bytes of commands arguments in headers | ||||
devel-peer-request: finished in *.???? seconds (200) (glob) | ||||
|
r35714 | searching for changes | ||
all remote heads known locally | ||||
preparing listkeys for "phases" | ||||
sending listkeys command | ||||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=listkeys | ||
devel-peer-request: Vary X-HgArg-1,X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: 16 bytes of commands arguments in headers | ||||
devel-peer-request: finished in *.???? seconds (200) (glob) | ||||
|
r35714 | received listkey for "phases": 58 bytes | ||
checking for updated bookmarks | ||||
preparing listkeys for "bookmarks" | ||||
sending listkeys command | ||||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=listkeys | ||
devel-peer-request: Vary X-HgArg-1,X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: 19 bytes of commands arguments in headers | ||||
devel-peer-request: finished in *.???? seconds (200) (glob) | ||||
|
r35714 | received listkey for "bookmarks": 0 bytes | ||
sending branchmap command | ||||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=branchmap | ||
devel-peer-request: Vary X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: finished in *.???? seconds (200) (glob) | ||||
|
r35714 | sending branchmap command | ||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=branchmap | ||
devel-peer-request: Vary X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: finished in *.???? seconds (200) (glob) | ||||
|
r35714 | preparing listkeys for "bookmarks" | ||
sending listkeys command | ||||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=listkeys | ||
devel-peer-request: Vary X-HgArg-1,X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: 19 bytes of commands arguments in headers | ||||
devel-peer-request: finished in *.???? seconds (200) (glob) | ||||
|
r35714 | received listkey for "bookmarks": 0 bytes | ||
1 changesets found | ||||
list of changesets: | ||||
7f4e523d01f2cc3765ac8934da3d14db775ff872 | ||||
bundle2-output-bundle: "HG20", 5 parts total | ||||
|
r36986 | bundle2-output-part: "replycaps" 205 bytes payload | ||
|
r35714 | bundle2-output-part: "check:phases" 24 bytes payload | ||
bundle2-output-part: "check:heads" streamed payload | ||||
bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload | ||||
bundle2-output-part: "phase-heads" 24 bytes payload | ||||
sending unbundle command | ||||
|
r36986 | sending 1013 bytes | ||
|
r35716 | devel-peer-request: POST http://localhost:$HGPORT2/?cmd=unbundle | ||
|
r36986 | devel-peer-request: Content-length 1013 | ||
|
r35716 | devel-peer-request: Content-type application/mercurial-0.1 | ||
devel-peer-request: Vary X-HgArg-1,X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: 16 bytes of commands arguments in headers | ||||
|
r36986 | devel-peer-request: 1013 bytes of data | ||
|
r35716 | devel-peer-request: finished in *.???? seconds (200) (glob) | ||
|
r35714 | bundle2-input-bundle: no-transaction | ||
bundle2-input-part: "reply:changegroup" (advisory) (params: 0 advisory) supported | ||||
bundle2-input-part: "output" (advisory) (params: 0 advisory) supported | ||||
bundle2-input-part: total payload size 100 | ||||
remote: adding changesets | ||||
remote: adding manifests | ||||
remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | ||||
bundle2-input-part: "output" (advisory) supported | ||||
bundle2-input-bundle: 2 parts total | ||||
preparing listkeys for "phases" | ||||
sending listkeys command | ||||
|
r35716 | devel-peer-request: GET http://localhost:$HGPORT2/?cmd=listkeys | ||
devel-peer-request: Vary X-HgArg-1,X-HgProto-1 | ||||
devel-peer-request: X-hgproto-1 0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
devel-peer-request: 16 bytes of commands arguments in headers | ||||
devel-peer-request: finished in *.???? seconds (200) (glob) | ||||
|
r35714 | received listkey for "phases": 15 bytes | ||
$ hg rollback -q | ||||
|
r20385 | |||
|
r29564 | $ sed 's/.*] "/"/' < ../access.log | ||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
"GET /?cmd=capabilities HTTP/1.1" 401 - | ||||
"GET /?cmd=capabilities HTTP/1.1" 401 - | ||||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
|
r36772 | "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=capabilities HTTP/1.1" 401 - | ||||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
"GET /?cmd=stream_out HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D5fed3813f7f5e1824344fdc9cf8f63bb662c292d x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
|
r35269 | "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
|
r35269 | "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
"GET /?cmd=capabilities HTTP/1.1" 401 - | ||||
"GET /?cmd=capabilities HTTP/1.1" 403 - | ||||
"GET /?cmd=capabilities HTTP/1.1" 401 - | ||||
|
r20385 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
|
r35073 | "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D7f4e523d01f2cc3765ac8934da3d14db775ff872 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
|
r28996 | "POST /?cmd=unbundle HTTP/1.1" 200 - x-hgarg-1:heads=666f726365* (glob) | ||
|
r35073 | "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||
|
r36772 | "GET /?cmd=capabilities HTTP/1.1" 401 - | ||
|
r35714 | "GET /?cmd=capabilities HTTP/1.1" 200 - | ||
"GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D7f4e523d01f2cc3765ac8934da3d14db775ff872 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"POST /?cmd=unbundle HTTP/1.1" 200 - x-hgarg-1:heads=666f726365 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ | ||||
|
r20385 | |||
|
r15026 | $ cd .. | ||
|
r15055 | clone of serve with repo in root and unserved subrepo (issue2970) | ||
$ hg --cwd test init sub | ||||
|
r17260 | $ echo empty > test/sub/empty | ||
$ hg --cwd test/sub add empty | ||||
$ hg --cwd test/sub commit -qm 'add empty' | ||||
$ hg --cwd test/sub tag -r 0 something | ||||
|
r15055 | $ echo sub = sub > test/.hgsub | ||
$ hg --cwd test add .hgsub | ||||
$ hg --cwd test commit -qm 'add subrepo' | ||||
$ hg clone http://localhost:$HGPORT noslash-clone | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 3 changesets with 7 changes to 7 files | ||||
|
r34662 | new changesets 8b6053c928fe:56f9bc90cce6 | ||
|
r15055 | updating to branch default | ||
abort: HTTP Error 404: Not Found | ||||
[255] | ||||
$ hg clone http://localhost:$HGPORT/ slash-clone | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 3 changesets with 7 changes to 7 files | ||||
|
r34662 | new changesets 8b6053c928fe:56f9bc90cce6 | ||
|
r15055 | updating to branch default | ||
abort: HTTP Error 404: Not Found | ||||
[255] | ||||
|
r13445 | check error log | ||
$ cat error.log | ||||
|
r30914 | |||
check abort error reporting while pulling/cloning | ||||
$ $RUNTESTDIR/killdaemons.py | ||||
|
r34484 | $ hg serve -R test -p $HGPORT -d --pid-file=hg3.pid -E error.log --config extensions.crash=${TESTDIR}/crashgetbundler.py | ||
|
r30914 | $ cat hg3.pid >> $DAEMON_PIDS | ||
$ hg clone http://localhost:$HGPORT/ abort-clone | ||||
requesting all changes | ||||
remote: abort: this is an exercise | ||||
abort: pull failed on remote | ||||
[255] | ||||
$ cat error.log | ||||
|
r31936 | |||
|
r32260 | disable pull-based clones | ||
|
r34484 | $ hg serve -R test -p $HGPORT1 -d --pid-file=hg4.pid -E error.log --config server.disablefullbundle=True | ||
|
r32260 | $ cat hg4.pid >> $DAEMON_PIDS | ||
$ hg clone http://localhost:$HGPORT1/ disable-pull-clone | ||||
requesting all changes | ||||
remote: abort: server has pull-based clones disabled | ||||
abort: pull failed on remote | ||||
(remove --pull if specified or upgrade Mercurial) | ||||
[255] | ||||
... but keep stream clones working | ||||
|
r34394 | $ hg clone --stream --noupdate http://localhost:$HGPORT1/ test-stream-clone | ||
|
r32260 | streaming all changes | ||
* files to transfer, * of data (glob) | ||||
transferred * in * seconds (*/sec) (glob) | ||||
searching for changes | ||||
no changes found | ||||
$ cat error.log | ||||
... and also keep partial clones and pulls working | ||||
$ hg clone http://localhost:$HGPORT1 --rev 0 test-partial-clone | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 4 changes to 4 files | ||||
|
r34662 | new changesets 8b6053c928fe | ||
|
r32260 | updating to branch default | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg pull -R test-partial-clone | ||||
pulling from http://localhost:$HGPORT1/ | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 3 changes to 3 files | ||||
|
r34662 | new changesets 5fed3813f7f5:56f9bc90cce6 | ||
|
r32260 | (run 'hg update' to get a working copy) | ||
|
r31936 | corrupt cookies file should yield a warning | ||
$ cat > $TESTTMP/cookies.txt << EOF | ||||
> bad format | ||||
> EOF | ||||
$ hg --config auth.cookiefile=$TESTTMP/cookies.txt id http://localhost:$HGPORT/ | ||||
|
r32008 | (error loading cookie file $TESTTMP/cookies.txt: '*/cookies.txt' does not look like a Netscape format cookies file; continuing without cookies) (glob) | ||
|
r31936 | 56f9bc90cce6 | ||
$ killdaemons.py | ||||
Create dummy authentication handler that looks for cookies. It doesn't do anything | ||||
useful. It just raises an HTTP 500 with details about the Cookie request header. | ||||
We raise HTTP 500 because its message is printed in the abort message. | ||||
$ cat > cookieauth.py << EOF | ||||
> from mercurial import util | ||||
> from mercurial.hgweb import common | ||||
> def perform_authentication(hgweb, req, op): | ||||
|
r36893 | > cookie = req.headers.get('Cookie') | ||
|
r31936 | > if not cookie: | ||
> raise common.ErrorResponse(common.HTTP_SERVER_ERROR, 'no-cookie') | ||||
> raise common.ErrorResponse(common.HTTP_SERVER_ERROR, 'Cookie: %s' % cookie) | ||||
> def extsetup(): | ||||
> common.permhooks.insert(0, perform_authentication) | ||||
> EOF | ||||
$ hg serve --config extensions.cookieauth=cookieauth.py -R test -p $HGPORT -d --pid-file=pid | ||||
$ cat pid > $DAEMON_PIDS | ||||
Request without cookie sent should fail due to lack of cookie | ||||
$ hg id http://localhost:$HGPORT | ||||
abort: HTTP Error 500: no-cookie | ||||
[255] | ||||
Populate a cookies file | ||||
$ cat > cookies.txt << EOF | ||||
> # HTTP Cookie File | ||||
> # Expiration is 2030-01-01 at midnight | ||||
> .example.com TRUE / FALSE 1893456000 hgkey examplevalue | ||||
> EOF | ||||
Should not send a cookie for another domain | ||||
$ hg --config auth.cookiefile=cookies.txt id http://localhost:$HGPORT/ | ||||
abort: HTTP Error 500: no-cookie | ||||
[255] | ||||
Add a cookie entry for our test server and verify it is sent | ||||
$ cat >> cookies.txt << EOF | ||||
> localhost.local FALSE / FALSE 1893456000 hgkey localhostvalue | ||||
> EOF | ||||
$ hg --config auth.cookiefile=cookies.txt id http://localhost:$HGPORT/ | ||||
abort: HTTP Error 500: Cookie: hgkey=localhostvalue | ||||
[255] | ||||