summaryrefslogtreecommitdiff
path: root/infra
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2016-07-17 15:14:00 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2016-07-31 22:33:13 +0100
commit349b41c2bded6dea53dd947e4ee5c16867b6d055 (patch)
tree3bb74ae187bed776d9fb4ef202385850d745770c /infra
parent509af629e19c6c9d973d9fc8cd1739bd8de2d9d9 (diff)
Tag change: Update dgit-repos-server
Change the calls to debiantag_old to changes to debiantags, and the regexp to tolerate either tag name. We need an additional check that we are not receiving the tag named by debiantag_new when debiantag_old already exists. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'infra')
-rwxr-xr-xinfra/dgit-repos-server18
1 files changed, 13 insertions, 5 deletions
diff --git a/infra/dgit-repos-server b/infra/dgit-repos-server
index 3c87341..f7d1b04 100755
--- a/infra/dgit-repos-server
+++ b/infra/dgit-repos-server
@@ -342,7 +342,8 @@ sub movetogarbage () {
ensuredir "$dgitrepos/_removed-tags";
open PREVIOUS, ">>", removedtagsfile or die removedtagsfile." $!";
- git_for_each_ref('refs/tags/'.debiantag_old('*',$distro), sub {
+ git_for_each_ref([ map { 'refs/tags/'.$_ } debiantags('*',$distro) ],
+ sub {
my ($objid,$objtype,$fullrefname,$reftail) = @_;
print PREVIOUS "\n$objid $reftail .\n" or die $!;
}, $real);
@@ -496,7 +497,7 @@ sub readupdates () {
printdebug " upd.| $_\n";
m/^(\S+) (\S+) (\S+)$/ or die "$_ ?";
my ($old, $sha1, $refname) = ($1, $2, $3);
- if ($refname =~ m{^refs/tags/(?=$distro/)}) {
+ if ($refname =~ m{^refs/tags/(?=(?:archive/)?$distro/)}) {
reject "pushing multiple tags!" if defined $tagname;
$tagname = $'; #';
$tagval = $sha1;
@@ -821,9 +822,16 @@ sub checks () {
tagh1('object') eq $commit or reject "tag refers to wrong commit";
tagh1('tag') eq $tagname or reject "tag name in tag is wrong";
- my $expecttagname = debiantag_old $version, $distro;
- printdebug "expected tag $expecttagname\n";
- $tagname eq $expecttagname or die;
+ my @expecttagnames = debiantags($version, $distro);
+ printdebug "expected tag @expecttagnames\n";
+ grep { $tagname eq $_ } @expecttagnames or die;
+
+ foreach my $othertag (grep { $_ ne $tagname } @expecttagnames) {
+ reject "tag $othertag (pushed with differing dgit version)".
+ " already exists -".
+ " not replacing previously-pushed version"
+ if git_get_ref "refs/tags/".$othertag;
+ }
lockrealtree();