X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=infra%2Fdgit-ssh-dispatch;h=377f8b81d6786ba706ea73e75e0ac2aa6c3043d2;hp=f29515f53e073c8b19e7345f950a278dad58e896;hb=f7d222ee9782806cd05d7a82595c142096c3bd04;hpb=10ac2ae8f0d807790ac337b5424a53e8d5e239c2 diff --git a/infra/dgit-ssh-dispatch b/infra/dgit-ssh-dispatch index f29515f5..377f8b81 100755 --- a/infra/dgit-ssh-dispatch +++ b/infra/dgit-ssh-dispatch @@ -111,6 +111,12 @@ sub hasrepo () { } } +sub serve_up ($) { + my ($repo) = @_; + exec qw(git upload-pack --strict --timeout=1000), $repo; + die "exec git: $!"; +} + sub dispatch () { local ($_) = $ENV{'SSH_ORIGINAL_COMMAND'}; @@ -119,8 +125,8 @@ sub dispatch () { prl hasrepo; finish; } elsif ( - m#^${qre}git-([-a-z]+) ${qre}/dgit/($lre)/repos/($lre)\.git${qre}$# - ) { + m#^${qre}git-([-a-z]+) ${qre}/dgit/($lre)/repos/($lre)\.git${qre}$# + ) { my $cmd=$1; selectpackage $2,$3; if ($cmd eq 'receive-pack') { @@ -129,11 +135,18 @@ sub dispatch () { die "exec $s: $!"; } elsif ($cmd eq 'upload-pack') { $repo='$repos/_empty' unless hasrepo; - exec qw(git upload-pack --strict --timeout=1000), $repo; - die "exec git: $!"; + serve_up $repo; } else { die "unsupported git operation $cmd ($_)"; } + } elsif ( + m#^${qre}git-upload-pack ${qre}/dgit/($lre)/(?:repos/)?_dgit-repos-server\.git${qre}$# + ) { + my $distro= $1; + serve_up("$dispatchdir/distro=$1/dgit-live/.git"); + } elsif (m#^${qre}git-upload-pack\s#) { + die "unknown repo to serve ($_). use dgit, or for server source ". + "git clone here:/dgit/DISTRO/repos/_dgit-repos-server.git"; } else { die "unsupported operation ($_)"; }