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.