threads / discuss / 64111

Git dumb HTTP protocol should use WebDAV PROPFIND method

Subject: Git dumb HTTP protocol should use WebDAV PROPFIND method

## tl;dr

3 messages between Sep 8, 2025 and Sep 8, 2025.

replies: 2people: 2as markdown or json

Milan Hauth· Sep 8, 2025, 12:10 UTC · lore
i am serving git repos over http with webdav extensions

read operations like git ls-remote, git fetch, git pull should work with such an http remote but currently (with git 2.49.0) this fails with

$ git ls-remote http://localhost/src/somerepo/ fatal: repository 'http://localhost/src/somerepo/' not found

$ git ls-remote http://localhost/src/somerepo/.git/ fatal: repository 'http://localhost/src/somerepo/.git/' not found

http server: nginx

nginx webdav module: https://github.com/mid1221213/nginx-dav-ext-module

nginx config:
Show 14 quoted lines
> http {
>   server {
>     listen 0.0.0.0:80;
>     root /var/www/nginx/htdocs;
>     location /src/ {
>       # PROPFIND allows directory listing
>       dav_ext_methods PROPFIND OPTIONS;
>       dav_access user:r group:r all:r;
>       autoindex on;
>       # disable index.html
>       index this_file_should_never_exist_DsMSIsKgBk;
>     }
>   }
> }
available methods can be fetched with the OPTIONS method
curl -s -i -X OPTIONS http://localhost/src/somerepo/ | grep -i ^allow:
directory listings can be fetched with the PROPFIND method

curl -s -X PROPFIND -H "Depth: 1" http://localhost/src/somerepo/ | grep -F 'D:displayname' | sed -E 's|.*>(.*)<.*|\1|' | LANG=C sort

workaround:

pushd /path/to/repo/.git/ git --bare update-server-info mv hooks/post-update.sample hooks/post-update popd git ls-remote http://localhost/src/somerepo/.git/

continue:

Git dumb HTTP protocol should work without update-server-info https://lore.kernel.org/git/CAGiEHCtP29bQRsEyLabNrLuiP96P-o7EEGi88B7pJbP0tfprxw@mail.gmail.com/

Show 6 quoted lines
> reading directories is only possible with WebDAV since
> HTTP doesn't offer native directory listing.  However, we don't use
> WebDAV for fetches and other read operations and not all web servers
> support it.  We get better web server support in many cases by requiring
> that the server side do the work of updating the lists of packs and
> refs.
Junio C Hamano· Sep 8, 2025, 18:47 UTC · re: Milan Hauth · lore

Re: Git dumb HTTP protocol should use WebDAV PROPFIND method

Milan Hauth <milahu@gmail.com> writes:
Show 7 quoted lines
> workaround:
>
> pushd /path/to/repo/.git/
> git --bare update-server-info
> mv hooks/post-update.sample hooks/post-update
> popd
> git ls-remote http://localhost/src/somerepo/.git/

That is not a workaround, but the proper way the system was designed to be used.

After all, the "dumb HTTP" support is just that. It is known to be ultra inefficient relative to other transport methods like "git protocol over ssh connection", and "smart HTTP stateless connection", and the WHOLE point of supporting "dumb HTTP" transport is to allow a truly dumb HTTP serving infrastructure. Letting the clients assume that WebDAV exists on the server side defeats its reason to exist.

Milan Hauth· Sep 8, 2025, 19:09 UTC · re: Junio C Hamano · lore

Re: Git dumb HTTP protocol should use WebDAV PROPFIND method

> assume that WebDAV exists on the server side
no

plan A: q: GET $url/info/refs r: HTTP 404

plan B: q: GET $url/.git/info/refs r: HTTP 404

plan C: q: OPTIONS r: Allow: GET,HEAD,PROPFIND,OPTIONS q: PROPFIND $url r: ...

plan D: q: PROPFIND $url/.git/ r: ...

(q = query, r = response)
so instead of throwing
> fatal: repository '$url' not found

git should try plan A, B, C, D, ... to fetch data from the repo

currently, git gives up after plan A
> the WHOLE point of supporting "dumb HTTP" transport
> is to allow a truly dumb HTTP serving infrastructure

there are at least 2 variants of "dumb HTTP servers": HTTP servers without WebDAV HTTP servers with WebDAV

> assume that WebDAV exists on the server side

for HTTP servers without WebDAV see my other thread

Git dumb HTTP protocol should work without update-server-info https://lore.kernel.org/git/CAGiEHCtP29bQRsEyLabNrLuiP96P-o7EEGi88B7pJbP0tfprxw@mail.gmail.com/

← back to recent threads