lfs: add an experimental knob to disable blob serving
The use case here is the server admin may want to store the blobs elsewhere. As
it stands now, the `lfs.url` config on the client side is all that enforces this
(the web.allow-* permissions aren't able to block LFS blobs without also
blocking normal hg traffic). The real solution to this is to implement the
'verify' action on the client and server, but that's not a near term goal.
Whether this is useful in its own right, and should be promoted out of
experimental at some point is TBD.
Since the other two tests that deal with LFS and `hg serve` are already complex
and have #testcases, this seems like a good time to start a new test dedicated
to access checks against the server. Instead of conditionally wrapping the
wire protocol handler, I put this in the handler because I'd still like to bring
the annotations in from the evolve extension in order to set up the wrapping.
The 400 status probably isn't great, but that's what it would be for existing
`hg serve` instances without support for serving blobs.
$ . "$TESTDIR/narrow-library.sh"
$ hg init repo
$ cd repo
$ cat << EOF > .hg/narrowspec
> [includes]
> path:foo
> [excludes]
> EOF
$ echo treemanifest >> .hg/requires
$ echo narrowhg-experimental >> .hg/requires
$ mkdir -p foo/bar
$ echo b > foo/f
$ echo c > foo/bar/f
$ hg commit -Am hi
adding foo/bar/f
adding foo/f
$ hg debugindex -m
rev offset length delta linkrev nodeid p1 p2
0 0 47 -1 0 14a5d056d75a 000000000000 000000000000
$ hg debugindex --dir foo
rev offset length delta linkrev nodeid p1 p2
0 0 77 -1 0 e635c7857aef 000000000000 000000000000
$ hg debugindex --dir foo/
rev offset length delta linkrev nodeid p1 p2
0 0 77 -1 0 e635c7857aef 000000000000 000000000000
$ hg debugindex --dir foo/bar
rev offset length delta linkrev nodeid p1 p2
0 0 44 -1 0 e091d4224761 000000000000 000000000000
$ hg debugindex --dir foo/bar/
rev offset length delta linkrev nodeid p1 p2
0 0 44 -1 0 e091d4224761 000000000000 000000000000
$ hg debugdata -m 0
foo\x00e635c7857aef92ac761ce5741a99da159abbbb24t (esc)
$ hg debugdata --dir foo 0
bar\x00e091d42247613adff5d41b67f15fe7189ee97b39t (esc)
f\x001e88685f5ddec574a34c70af492f95b6debc8741 (esc)
$ hg debugdata --dir foo/ 0
bar\x00e091d42247613adff5d41b67f15fe7189ee97b39t (esc)
f\x001e88685f5ddec574a34c70af492f95b6debc8741 (esc)
$ hg debugdata --dir foo/bar 0
f\x00149da44f2a4e14f488b7bd4157945a9837408c00 (esc)
$ hg debugdata --dir foo/bar/ 0
f\x00149da44f2a4e14f488b7bd4157945a9837408c00 (esc)