X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=infra%2Fdgit-repos-server;h=56fc4fd0ef766bbfd617aac8dfc34148ccfd55c2;hp=c70bc27fd13b8a7d50ea3d25dba2bd9a7588f3ef;hb=eab588a83905122af678182876c2f800e4b6fa77;hpb=1b2c10f57b0257aac61a696378e9c8c05df8bf4f diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server index c70bc27f..56fc4fd0 100755 --- a/infra/dgit-repos-server +++ b/infra/dgit-repos-server @@ -2,7 +2,7 @@ # dgit-repos-server # # usages: -# .../dgit-repos-server SUITES KEYRING-AUTH-SPEC DGIT-REPOS-DIR --ssh +# .../dgit-repos-server DISTRO SUITES KEYRING-AUTH-SPEC DGIT-REPOS-DIR --ssh # internal usage: # .../dgit-repos-server --pre-receive-hook PACKAGE # @@ -100,6 +100,8 @@ our $workrepo; our $keyrings; our @lockfhs; our $debug=''; +our @deliberatelies; +our $policy; #----- utilities ----- @@ -331,6 +333,20 @@ sub parsetag () { for (;;) { print PT or die $!; $!=0; $_=; defined or die "missing signature? $!"; + if (m/^\[dgit ([^"].*)\]$/) { # [dgit "something"] is for future + $_ = $1." "; + for (;;) { + if (s/^distro\=(\S+) //) { + die "$1 != $distro" unless $1 eq $distro; + } elsif (s/^(--deliberately-$package_re) //) { + push @deliberatelies, $1; + } elsif (s/^[-+.=0-9a-z]\S* //) { + } else { + die "unknown dgit info in tag"; + } + } + next; + } last if m/^-----BEGIN PGP/; } for (;;) { @@ -463,7 +479,7 @@ sub tagh1 ($) { sub checks () { debug "checks"; - checksuite(); + tagh1('type') eq 'commit' or reject "tag refers to wrong kind of object"; tagh1('object') eq $commit or reject "tag refers to wrong commit"; tagh1('tag') eq $tagname or reject "tag name in tag is wrong"; @@ -474,6 +490,8 @@ sub checks () { debug "translated version $v"; $tagname eq "debian/$v" or die; + checksuite(); + # check that our ref is being fast-forwarded debug "oldcommit $oldcommit"; if ($oldcommit =~ m/[^0]/) { @@ -549,6 +567,7 @@ sub parseargsdispatch () { shift @ARGV; @ARGV == 1 or die; $package = shift @ARGV; + defined($distro = $ENV{'DGIT_DRS_DISTRO'}) or die; defined($suitesfile = $ENV{'DGIT_DRS_SUITES'}) or die; defined($workrepo = $ENV{'DGIT_DRS_WORK'}) or die; defined($destrepo = $ENV{'DGIT_DRS_DEST'}) or die; @@ -564,6 +583,7 @@ sub parseargsdispatch () { exit 0; } + $ENV{'DGIT_DRS_DISTRO'} = argval(); $ENV{'DGIT_DRS_SUITES'} = argval(); $ENV{'DGIT_DRS_KEYRINGS'} = argval(); $dgitrepos = argval();