chiark / gitweb /
Test suite: Introduce setup/gnupg
[dgit.git] / Debian / Dgit.pm
index 979dd427fcf77fc332a14c2272936809f3e6fb7c..5c43f0257b82860f0e6cff3e7d85040c144cd8df 100644 (file)
@@ -1,4 +1,21 @@
 # -*- perl -*-
+# dgit
+# Debian::Dgit: functions common to dgit and its helpers and servers
+#
+# Copyright (C) 2015-2016  Ian Jackson
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 package Debian::Dgit;
 
@@ -19,7 +36,8 @@ BEGIN {
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
     @EXPORT      = qw(setup_sigwarn
-                      debiantag_old server_branch server_ref
+                      debiantags debiantag_old debiantag_new
+                     server_branch server_ref
                       stat_exists link_ltarget
                      hashfile
                       fail ensuredir executable_on_path
@@ -131,6 +149,17 @@ sub debiantag_old ($$) {
     return "$distro/$v";
 }
 
+sub debiantag_new ($$) { 
+    my ($v,$distro) = @_;
+    $v =~ y/~:/_%/;
+    return "archive/$distro/$v";
+}
+
+sub debiantags ($$) {
+    my ($version,$distro) = @_;
+    map { $_->($version, $distro) } (\&debiantag_new, \&debiantag_old);
+}
+
 sub server_branch ($) { return "$branchprefix/$_[0]"; }
 sub server_ref ($) { return "refs/".server_branch($_[0]); }
 
@@ -147,6 +176,7 @@ sub _us () {
 
 sub fail { 
     my $s = "@_\n";
+    $s =~ s/\n\n$/\n/;
     my $prefix = _us().": ";
     $s =~ s/^/$prefix/gm;
     die $s;
@@ -260,7 +290,9 @@ sub git_for_each_ref ($$;$) {
     # calls $func->($objid,$objtype,$fullrefname,$reftail);
     # $reftail is RHS of ref after refs/[^/]+/
     # breaks if $pattern matches any ref `refs/blah' where blah has no `/'
-    my @cmd = (qw(git for-each-ref), $pattern);
+    # $pattern may be an array ref to mean multiple patterns
+    $pattern = [ $pattern ] unless ref $pattern;
+    my @cmd = (qw(git for-each-ref), @$pattern);
     if (defined $gitdir) {
        @cmd = ('sh','-ec','cd "$1"; shift; exec "$@"','x', $gitdir, @cmd);
     }