##// END OF EJS Templates
issue6528: add a config option to control the fixing on the fly...
issue6528: add a config option to control the fixing on the fly This will allow people who know to be safe to avoid any performance overhead (and other potential issue). Differential Revision: https://phab.mercurial-scm.org/D11271

File last commit:

r47378:7015b023 default
r48630:2813d406 5.9rc1 stable
Show More
test-lfs-serve-access.t
512 lines | 29.8 KiB | text/troff | Tads3Lexer
/ tests / test-lfs-serve-access.t
Kyle Lippincott
tests: mark tests that fail when using chg as #require no-chg...
r38041 #require serve no-reposimplestore no-chg
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265
$ cat >> $HGRCPATH <<EOF
> [extensions]
> lfs=
> [lfs]
> track=all()
> [web]
> push_ssl = False
> allow-push = *
> EOF
Serving LFS files can experimentally be turned off. The long term solution is
to support the 'verify' action in both client and server, so that the server can
tell the client to store files elsewhere.
$ hg init server
$ hg --config "lfs.usercache=$TESTTMP/servercache" \
> --config experimental.lfs.serve=False -R server serve -d \
Matt Harbison
lfs: enable workers by default...
r44747 > --config experimental.lfs.worker-enable=False \
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265 > -p $HGPORT --pid-file=hg.pid -A $TESTTMP/access.log -E $TESTTMP/errors.log
$ cat hg.pid >> $DAEMON_PIDS
Uploads fail...
$ hg init client
$ echo 'this-is-an-lfs-file' > client/lfs.bin
$ hg -R client ci -Am 'initial commit'
adding lfs.bin
$ hg -R client push http://localhost:$HGPORT
pushing to http://localhost:$HGPORT/
searching for changes
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS HTTP error: HTTP Error 400: no such method: .git
Matt Harbison
lfs: improve the hints for common errors in the Batch API...
r40696 (check that lfs serving is enabled on http://localhost:$HGPORT/.git/info/lfs and "upload" is supported)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265
... so do a local push to make the data available. Remove the blob from the
default cache, so it attempts to download.
$ hg --config "lfs.usercache=$TESTTMP/servercache" \
> --config "lfs.url=null://" \
> -R client push -q server
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 $ mv `hg config lfs.usercache` $TESTTMP/servercache
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265
Downloads fail...
$ hg clone http://localhost:$HGPORT httpclone
Matt Harbison
lfs: autoload the extension when cloning from repo with lfs enabled...
r40360 (remote is using large file support (lfs); lfs will be enabled for this repository)
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265 requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
new changesets 525251863cad
updating to branch default
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS HTTP error: HTTP Error 400: no such method: .git
Matt Harbison
lfs: improve the hints for common errors in the Batch API...
r40696 (check that lfs serving is enabled on http://localhost:$HGPORT/.git/info/lfs and "download" is supported)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265
$ cat $TESTTMP/access.log $TESTTMP/errors.log
Gregory Szorc
httppeer: only advertise partial-pull if capabilities are known...
r37574 $LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
Joerg Sonnenberger
wireproto: support for pullbundles...
r37516 $LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D525251863cad618e55d483555f3d00a2ca99597e x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265 $LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 400 - (glob)
Gregory Szorc
httppeer: only advertise partial-pull if capabilities are known...
r37574 $LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
Joerg Sonnenberger
wireproto: support for pullbundles...
r37516 $LOCALIP - - [$LOGDATE$] "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$ partial-pull (glob)
Joerg Sonnenberger
exchange: stop advertising rev-branch-cache bundle capability...
r47378 $LOCALIP - - [$LOGDATE$] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%252C03%250Acheckheads%253Drelated%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=525251863cad618e55d483555f3d00a2ca99597e&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Matt Harbison
lfs: add an experimental knob to disable blob serving...
r37265 $LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 400 - (glob)
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635
$ rm -f $TESTTMP/access.log $TESTTMP/errors.log
$ hg --config "lfs.usercache=$TESTTMP/servercache" -R server serve -d \
> -p $HGPORT --pid-file=hg.pid --prefix=subdir/mount/point \
> -A $TESTTMP/access.log -E $TESTTMP/errors.log
$ cat hg.pid >> $DAEMON_PIDS
Matt Harbison
lfs: improve the hints for common errors in the Batch API...
r40696 Reasonable hint for a misconfigured blob server
$ hg -R httpclone update default --config lfs.url=http://localhost:$HGPORT/missing
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS HTTP error: HTTP Error 404: Not Found
Matt Harbison
lfs: improve the hints for common errors in the Batch API...
r40696 (the "lfs.url" config may be used to override http://localhost:$HGPORT/missing)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
lfs: improve the hints for common errors in the Batch API...
r40696
Matt Harbison
lfs: handle URLErrors to add additional information...
r40697 $ hg -R httpclone update default --config lfs.url=http://localhost:$HGPORT2/missing
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS error: *onnection *refused* (glob) (?)
abort: LFS error: $EADDRNOTAVAIL$ (glob) (?)
abort: LFS error: No route to host (?)
Matt Harbison
lfs: handle URLErrors to add additional information...
r40697 (the "lfs.url" config may be used to override http://localhost:$HGPORT2/missing)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
lfs: handle URLErrors to add additional information...
r40697
Matt Harbison
lfs: improve the hints for common errors in the Batch API...
r40696 Blob URIs are correct when --prefix is used
Matt Harbison
lfs: fix the inferred remote store path when using a --prefix...
r37709 $ hg clone --debug http://localhost:$HGPORT/subdir/mount/point cloned2
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 using http://localhost:$HGPORT/subdir/mount/point
sending capabilities command
Matt Harbison
lfs: autoload the extension when cloning from repo with lfs enabled...
r40360 (remote is using large file support (lfs); lfs will be enabled for this repository)
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 query 1; heads
sending batch command
requesting all changes
sending getbundle command
bundle2-input-bundle: with-transaction
bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
adding changesets
add changeset 525251863cad
adding manifests
adding file changes
adding lfs.bin revisions
bundle2-input-part: total payload size 648
bundle2-input-part: "listkeys" (params: 1 mandatory) supported
bundle2-input-part: "phase-heads" supported
bundle2-input-part: total payload size 24
Joerg Sonnenberger
exchange: stop advertising rev-branch-cache bundle capability...
r47378 bundle2-input-bundle: 3 parts total
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 checking for updated bookmarks
updating the branch cache
changegroup: move message about added changes to transaction summary...
r43167 added 1 changesets with 1 changes to 1 files
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 new changesets 525251863cad
updating to branch default
resolving manifests
branchmerge: False, force: False, partial: False
ancestor: 000000000000, local: 000000000000+, remote: 525251863cad
Matt Harbison
lfs: fix the inferred remote store path when using a --prefix...
r37709 lfs: assuming remote store: http://localhost:$HGPORT/subdir/mount/point/.git/info/lfs
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 Status: 200
Content-Length: 371
Content-Type: application/vnd.git-lfs+json
Date: $HTTP_DATE$
Server: testing stub value
{
"objects": [
{
"actions": {
"download": {
"expires_at": "$ISO_8601_DATE_TIME$"
"header": {
"Accept": "application/vnd.git-lfs"
}
"href": "http://localhost:$HGPORT/subdir/mount/point/.hg/lfs/objects/f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e"
}
}
"oid": "f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e"
"size": 20
}
]
"transfer": "basic"
}
lfs: downloading f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e (20 bytes)
Status: 200
Content-Length: 20
Content-Type: application/octet-stream
Date: $HTTP_DATE$
Server: testing stub value
lfs: adding f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e to the usercache
lfs: processed: f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e
Matt Harbison
lfs: enable the final download count status message...
r37783 lfs: downloaded 1 files (20 bytes)
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 lfs.bin: remote created -> g
getting lfs.bin
lfs: found f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e in the local lfs store
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
clone: make sure we warm the cache after a clone...
r47032 updating the branch cache
Gregory Szorc
httppeer: report http statistics...
r40070 (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob)
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635
$ cat $TESTTMP/access.log $TESTTMP/errors.log
Matt Harbison
lfs: improve the hints for common errors in the Batch API...
r40696 $LOCALIP - - [$LOGDATE$] "POST /missing/objects/batch HTTP/1.1" 404 - (glob)
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 $LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Joerg Sonnenberger
exchange: stop advertising rev-branch-cache bundle capability...
r47378 $LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%252C03%250Acheckheads%253Drelated%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=525251863cad618e55d483555f3d00a2ca99597e&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Matt Harbison
lfs: teach the blob server to handle --prefix
r37635 $LOCALIP - - [$LOGDATE$] "POST /subdir/mount/point/.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point/.hg/lfs/objects/f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e HTTP/1.1" 200 - (glob)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
Matt Harbison
lfs: ensure the blob is linked to the remote store on skipped uploads...
r39491 Blobs that already exist in the usercache are linked into the repo store, even
though the client doesn't send the blob.
$ hg init server2
$ hg --config "lfs.usercache=$TESTTMP/servercache" -R server2 serve -d \
> -p $HGPORT --pid-file=hg.pid \
> -A $TESTTMP/access.log -E $TESTTMP/errors.log
$ cat hg.pid >> $DAEMON_PIDS
$ hg --config "lfs.usercache=$TESTTMP/servercache" -R cloned2 --debug \
> push http://localhost:$HGPORT | grep '^[{} ]'
{
"objects": [
{
"oid": "f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e"
"size": 20
}
]
"transfer": "basic"
}
$ find server2/.hg/store/lfs/objects | sort
server2/.hg/store/lfs/objects
server2/.hg/store/lfs/objects/f0
server2/.hg/store/lfs/objects/f0/3217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
Matt Harbison
lfs: ensure the blob is linked to the remote store on skipped uploads...
r39491 $ cat $TESTTMP/errors.log
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 $ cat >> $TESTTMP/lfsstoreerror.py <<EOF
> import errno
> from hgext.lfs import blobstore
>
> _numverifies = 0
> _readerr = True
>
> def reposetup(ui, repo):
> # Nothing to do with a remote repo
> if not repo.local():
> return
>
> store = repo.svfs.lfslocalblobstore
> class badstore(store.__class__):
Matt Harbison
lfs: check content length after downloading content...
r44544 > def download(self, oid, src, contentlength):
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 > '''Called in the server to handle reading from the client in a
> PUT request.'''
> origread = src.read
> def _badread(nbytes):
> # Simulate bad data/checksum failure from the client
> return b'0' * len(origread(nbytes))
> src.read = _badread
Matt Harbison
lfs: check content length after downloading content...
r44544 > super(badstore, self).download(oid, src, contentlength)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 >
> def _read(self, vfs, oid, verify):
> '''Called in the server to read data for a GET request, and then
> calls self._verify() on it before returning.'''
> global _readerr
> # One time simulation of a read error
> if _readerr:
> _readerr = False
Matt Harbison
py3: add b'' and r'' prefixes to LFS tests
r41468 > raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8"))
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 > # Simulate corrupt content on client download
Matt Harbison
py3: add b'' and r'' prefixes to LFS tests
r41468 > blobstore._verify(oid, b'dummy content')
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 >
> def verify(self, oid):
> '''Called in the server to populate the Batch API response,
> letting the client re-upload if the file is corrupt.'''
> # Fail verify in Batch API for one clone command and one push
> # command with an IOError. Then let it through to access other
> # functions. Checksum failure is tested elsewhere.
> global _numverifies
> _numverifies += 1
> if _numverifies <= 2:
Matt Harbison
py3: add b'' and r'' prefixes to LFS tests
r41468 > raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8"))
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 > return super(badstore, self).verify(oid)
>
> store.__class__ = badstore
> EOF
$ rm -rf `hg config lfs.usercache`
$ rm -f $TESTTMP/access.log $TESTTMP/errors.log
$ hg --config "lfs.usercache=$TESTTMP/servercache" \
> --config extensions.lfsstoreerror=$TESTTMP/lfsstoreerror.py \
> -R server serve -d \
> -p $HGPORT1 --pid-file=hg.pid -A $TESTTMP/access.log -E $TESTTMP/errors.log
$ cat hg.pid >> $DAEMON_PIDS
Test an I/O error in localstore.verify() (Batch API) with GET
$ hg clone http://localhost:$HGPORT1 httpclone2
Matt Harbison
lfs: autoload the extension when cloning from repo with lfs enabled...
r40360 (remote is using large file support (lfs); lfs will be enabled for this repository)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
new changesets 525251863cad
updating to branch default
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS server error for "lfs.bin": Internal server error
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
Test an I/O error in localstore.verify() (Batch API) with PUT
$ echo foo > client/lfs.bin
$ hg -R client ci -m 'mod lfs'
$ hg -R client push http://localhost:$HGPORT1
pushing to http://localhost:$HGPORT1/
searching for changes
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS server error for "unknown": Internal server error
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 TODO: figure out how to associate the file name in the error above
Test a bad checksum sent by the client in the transfer API
$ hg -R client push http://localhost:$HGPORT1
pushing to http://localhost:$HGPORT1/
searching for changes
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS HTTP error: HTTP Error 422: corrupt blob (oid=b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c, action=upload)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
$ echo 'test lfs file' > server/lfs3.bin
$ hg --config experimental.lfs.disableusercache=True \
> -R server ci -Aqm 'another lfs file'
$ hg -R client pull -q http://localhost:$HGPORT1
Test an I/O error during the processing of the GET request
$ hg --config lfs.url=http://localhost:$HGPORT1/.git/info/lfs \
> -R client update -r tip
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS HTTP error: HTTP Error 500: Internal Server Error (oid=276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d, action=download)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
Test a checksum failure during the processing of the GET request
$ hg --config lfs.url=http://localhost:$HGPORT1/.git/info/lfs \
> -R client update -r tip
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS HTTP error: HTTP Error 422: corrupt blob (oid=276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d, action=download)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
$ cat $TESTTMP/access.log
$LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "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$ partial-pull (glob)
Joerg Sonnenberger
exchange: stop advertising rev-branch-cache bundle capability...
r47378 $LOCALIP - - [$LOGDATE$] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%252C03%250Acheckheads%253Drelated%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=525251863cad618e55d483555f3d00a2ca99597e&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 $LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D392c05922088bacf8e68a6939b480017afbf245d x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D392c05922088bacf8e68a6939b480017afbf245d x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
Matt Harbison
lfs: gracefully handle aborts on the server when corrupt blobs are detected...
r37710 $LOCALIP - - [$LOGDATE$] "PUT /.hg/lfs/objects/b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c HTTP/1.1" 422 - (glob)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 $LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D392c05922088bacf8e68a6939b480017afbf245d x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Joerg Sonnenberger
exchange: stop advertising rev-branch-cache bundle capability...
r47378 $LOCALIP - - [$LOGDATE$] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%252C03%250Acheckheads%253Drelated%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=525251863cad618e55d483555f3d00a2ca99597e&heads=506bf3d83f78c54b89e81c6411adee19fdf02156+525251863cad618e55d483555f3d00a2ca99597e&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 $LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d HTTP/1.1" 500 - (glob)
$LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
Matt Harbison
lfs: gracefully handle aborts on the server when corrupt blobs are detected...
r37710 $LOCALIP - - [$LOGDATE$] "GET /.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d HTTP/1.1" 422 - (glob)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
$ grep -v ' File "' $TESTTMP/errors.log
Matt Harbison
lfs: log information about Internal Server Errors reported in the Batch API...
r37708 $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.git/info/lfs/objects/batch': (glob)
$LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob)
$LOCALIP - - [$ERRDATE$] HG error: verifies = store.verify(oid) (glob)
Matt Harbison
py3: add b'' and r'' prefixes to LFS tests
r41468 $LOCALIP - - [$ERRDATE$] HG error: raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) (glob)
Paul Sonnenschein
tests: remove hardcoded errno values...
r44243 $LOCALIP - - [$ERRDATE$] HG error: *Error: [Errno *] f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e: I/O error (glob)
Matt Harbison
lfs: log information about Internal Server Errors reported in the Batch API...
r37708 $LOCALIP - - [$ERRDATE$] HG error: (glob)
$LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.git/info/lfs/objects/batch': (glob)
$LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob)
$LOCALIP - - [$ERRDATE$] HG error: verifies = store.verify(oid) (glob)
Matt Harbison
py3: add b'' and r'' prefixes to LFS tests
r41468 $LOCALIP - - [$ERRDATE$] HG error: raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) (glob)
Paul Sonnenschein
tests: remove hardcoded errno values...
r44243 $LOCALIP - - [$ERRDATE$] HG error: *Error: [Errno *] b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c: I/O error (glob)
Matt Harbison
lfs: log information about Internal Server Errors reported in the Batch API...
r37708 $LOCALIP - - [$ERRDATE$] HG error: (glob)
Matt Harbison
lfs: gracefully handle aborts on the server when corrupt blobs are detected...
r37710 $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.hg/lfs/objects/b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c': (glob)
$LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob)
Matt Harbison
lfs: check content length after downloading content...
r44544 $LOCALIP - - [$ERRDATE$] HG error: localstore.download(oid, req.bodyfh, req.headers[b'Content-Length'])
$LOCALIP - - [$ERRDATE$] HG error: super(badstore, self).download(oid, src, contentlength)
Gregory Szorc
py3: conditionalize test-lfs-serve-access.t for Python 3.8...
r44581 $LOCALIP - - [$ERRDATE$] HG error: raise LfsCorruptionError( (glob) (py38 !)
$LOCALIP - - [$ERRDATE$] HG error: _(b'corrupt remote lfs object: %s') % oid (glob) (no-py38 !)
Denis Laxalde
py3: add Python 3 exception output to test-lfs-serve-access.t...
r43719 $LOCALIP - - [$ERRDATE$] HG error: LfsCorruptionError: corrupt remote lfs object: b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c (no-py3 !)
Denis Laxalde
py3: add a __str__ method to Abort...
r43720 $LOCALIP - - [$ERRDATE$] HG error: hgext.lfs.blobstore.LfsCorruptionError: corrupt remote lfs object: b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c (py3 !)
Matt Harbison
lfs: gracefully handle aborts on the server when corrupt blobs are detected...
r37710 $LOCALIP - - [$ERRDATE$] HG error: (glob)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d': (glob)
Traceback (most recent call last):
self.do_write()
self.do_hgweb()
for chunk in self.server.application(env, self._start_response):
for r in self._runwsgi(req, res, repo):
Gregory Szorc
py3: conditionalize test-lfs-serve-access.t for Python 3.8...
r44581 handled = wireprotoserver.handlewsgirequest( (py38 !)
return _processbasictransfer( (py38 !)
rctx, req, res, self.check_perm (no-py38 !)
Matt Harbison
py3: conditionalize some LFS test output...
r41477 return func(*(args + a), **kw) (no-py3 !)
Gregory Szorc
py3: conditionalize test-lfs-serve-access.t for Python 3.8...
r44581 rctx.repo, req, res, lambda perm: checkperm(rctx, req, perm) (no-py38 !)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707 res.setbodybytes(localstore.read(oid))
blob = self._read(self.vfs, oid, verify)
Matt Harbison
py3: add b'' and r'' prefixes to LFS tests
r41468 raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8"))
Paul Sonnenschein
tests: remove hardcoded errno values...
r44243 *Error: [Errno *] 276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d: I/O error (glob)
Matt Harbison
test-lfs: add tests to force server error path coverage...
r37707
Matt Harbison
lfs: gracefully handle aborts on the server when corrupt blobs are detected...
r37710 $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d': (glob)
$LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob)
$LOCALIP - - [$ERRDATE$] HG error: res.setbodybytes(localstore.read(oid)) (glob)
$LOCALIP - - [$ERRDATE$] HG error: blob = self._read(self.vfs, oid, verify) (glob)
Matt Harbison
py3: add b'' and r'' prefixes to LFS tests
r41468 $LOCALIP - - [$ERRDATE$] HG error: blobstore._verify(oid, b'dummy content') (glob)
Gregory Szorc
py3: conditionalize test-lfs-serve-access.t for Python 3.8...
r44581 $LOCALIP - - [$ERRDATE$] HG error: raise LfsCorruptionError( (glob) (py38 !)
$LOCALIP - - [$ERRDATE$] HG error: hint=_(b'run hg verify'), (glob) (no-py38 !)
Denis Laxalde
py3: add Python 3 exception output to test-lfs-serve-access.t...
r43719 $LOCALIP - - [$ERRDATE$] HG error: LfsCorruptionError: detected corrupt lfs object: 276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d (no-py3 !)
Denis Laxalde
py3: add a __str__ method to Abort...
r43720 $LOCALIP - - [$ERRDATE$] HG error: hgext.lfs.blobstore.LfsCorruptionError: detected corrupt lfs object: 276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d (py3 !)
Matt Harbison
lfs: gracefully handle aborts on the server when corrupt blobs are detected...
r37710 $LOCALIP - - [$ERRDATE$] HG error: (glob)
Matt Harbison
lfs: add the 'Authorization' property to the Batch API response, if present...
r37784
Basic Authorization headers are returned by the Batch API, and sent back with
the GET/PUT request.
$ rm -f $TESTTMP/access.log $TESTTMP/errors.log
$ cat >> $HGRCPATH << EOF
> [experimental]
> lfs.disableusercache = True
> [auth]
> l.schemes=http
> l.prefix=lo
> l.username=user
> l.password=pass
> EOF
Matt Harbison
tests: extract the http server authentication extension to a single module...
r41725 $ hg --config extensions.x=$TESTDIR/httpserverauth.py \
Matt Harbison
lfs: add the 'Authorization' property to the Batch API response, if present...
r37784 > -R server serve -d -p $HGPORT1 --pid-file=hg.pid \
> -A $TESTTMP/access.log -E $TESTTMP/errors.log
$ mv hg.pid $DAEMON_PIDS
$ hg clone --debug http://localhost:$HGPORT1 auth_clone | egrep '^[{}]| '
{
"objects": [
{
"actions": {
"download": {
"expires_at": "$ISO_8601_DATE_TIME$"
"header": {
"Accept": "application/vnd.git-lfs"
"Authorization": "Basic dXNlcjpwYXNz"
}
"href": "http://localhost:$HGPORT1/.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d"
}
}
"oid": "276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d"
"size": 14
}
]
"transfer": "basic"
}
$ echo 'another blob' > auth_clone/lfs.blob
$ hg -R auth_clone ci -Aqm 'add blob'
Matt Harbison
lfs: disable all authentication except Basic for HTTP(S) connections...
r41756
$ cat > use_digests.py << EOF
> from mercurial import (
> exthelper,
> url,
> )
>
> eh = exthelper.exthelper()
> uisetup = eh.finaluisetup
>
> @eh.wrapfunction(url, 'opener')
> def urlopener(orig, *args, **kwargs):
> opener = orig(*args, **kwargs)
> opener.addheaders.append((r'X-HgTest-AuthType', r'Digest'))
> return opener
> EOF
Test that Digest Auth fails gracefully before testing the successful Basic Auth
$ hg -R auth_clone push --config extensions.x=use_digests.py
pushing to http://localhost:$HGPORT1/
searching for changes
Martin von Zweigbergk
errors: remove trailing "!" from some error messages for consistency...
r46518 abort: LFS HTTP error: HTTP Error 401: the server must support Basic Authentication
Matt Harbison
lfs: disable all authentication except Basic for HTTP(S) connections...
r41756 (api=http://localhost:$HGPORT1/.git/info/lfs/objects/batch, action=upload)
Martin von Zweigbergk
errors: use detailed exit code 50 for StorageError...
r46732 [50]
Matt Harbison
lfs: disable all authentication except Basic for HTTP(S) connections...
r41756
Matt Harbison
lfs: add the 'Authorization' property to the Batch API response, if present...
r37784 $ hg -R auth_clone --debug push | egrep '^[{}]| '
{
"objects": [
{
"actions": {
"upload": {
"expires_at": "$ISO_8601_DATE_TIME$"
"header": {
"Accept": "application/vnd.git-lfs"
"Authorization": "Basic dXNlcjpwYXNz"
}
"href": "http://localhost:$HGPORT1/.hg/lfs/objects/df14287d8d75f076a6459e7a3703ca583ca9fb3f4918caed10c77ac8622d49b3"
}
}
"oid": "df14287d8d75f076a6459e7a3703ca583ca9fb3f4918caed10c77ac8622d49b3"
"size": 13
}
]
"transfer": "basic"
}
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
Matt Harbison
lfs: add the 'Authorization' property to the Batch API response, if present...
r37784
$ cat $TESTTMP/access.log $TESTTMP/errors.log
$LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 401 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "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$ partial-pull (glob)
Joerg Sonnenberger
exchange: stop advertising rev-branch-cache bundle capability...
r47378 $LOCALIP - - [$LOGDATE$] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%252C03%250Acheckheads%253Drelated%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=506bf3d83f78c54b89e81c6411adee19fdf02156+525251863cad618e55d483555f3d00a2ca99597e&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
Matt Harbison
lfs: add the 'Authorization' property to the Batch API response, if present...
r37784 $LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 401 - (glob)
$LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d HTTP/1.1" 200 - (glob)
Matt Harbison
lfs: disable all authentication except Basic for HTTP(S) connections...
r41756 $LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 401 - x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 401 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D525251863cad618e55d483555f3d00a2ca99597e+4d9397055dc0c205f3132f331f36353ab1a525a3 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D525251863cad618e55d483555f3d00a2ca99597e+4d9397055dc0c205f3132f331f36353ab1a525a3 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=branchmap HTTP/1.1" 401 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull x-hgtest-authtype:Digest (glob)
$LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 401 - x-hgtest-authtype:Digest (glob)
Matt Harbison
lfs: add the 'Authorization' property to the Batch API response, if present...
r37784 $LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 401 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D525251863cad618e55d483555f3d00a2ca99597e+4d9397055dc0c205f3132f331f36353ab1a525a3 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=branchmap HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=bookmarks x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 401 - (glob)
$LOCALIP - - [$LOGDATE$] "POST /.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "PUT /.hg/lfs/objects/df14287d8d75f076a6459e7a3703ca583ca9fb3f4918caed10c77ac8622d49b3 HTTP/1.1" 201 - (glob)
$LOCALIP - - [$LOGDATE$] "POST /?cmd=unbundle HTTP/1.1" 200 - x-hgarg-1:heads=666f726365 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)