chiark / gitweb /
suite canonicalisation, other fixes
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 15 Aug 2013 16:31:34 +0000 (17:31 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 15 Aug 2013 16:31:34 +0000 (17:31 +0100)
TODO
dgit

diff --git a/TODO b/TODO
index cff119beda3c0126d6776bd81b634ce2180c02bf..080502d9038b014bf2a670a77c6731e766fd36b1 100644 (file)
--- a/TODO
+++ b/TODO
@@ -4,8 +4,6 @@ Cope with non-Debian archives
 
 Make it possible to do dgit clone / fetch anonymously
 
-Suite name canonicalisation/mapping
-
 Archive agility.  Archive needs to specify (a) way to get versions
 and paths in archive for dscs (b) unpriv pull location (c) priv
 push location
diff --git a/dgit b/dgit
index f02bb30a646bbda0ba2a0a2354d753005431e13c..c255e1e1c4c99b689d27e29cdaf1312448ac9c48 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -134,17 +134,32 @@ sub parsechangelog {
     return $c;
 }
 
-sub get_archive_dsc () {
-    my $rmad = cmdoutput qw(rmadison -asource),"-s$suite",$package;
+our $rmad;
+
+sub askmadison () {
+    $rmad ||= cmdoutput qw(rmadison -asource),"-s$suite",$package;
     $rmad =~ m/^ \s*( [^ \t|]+ )\s* \|
                  \s*( [^ \t|]+ )\s* \|
                  \s*( [^ \t|]+ )\s* \|
                  \s*( [^ \t|]+ )\s* /x or die "$rmad $?";
     $1 eq $package or die "$rmad $package ?";
     my $vsn = $2;
-    $3 eq $suite or die "$rmad $suite ?";
+    if ($suite ne $3) {
+       # madison canonicalises for us
+       print "canonical suite name for $suite is $3\n";
+       $suite = $3;
+    }
     $4 eq 'source' or die "$rmad ?";
-    # fixme it does not show us the component ?
+    return $vsn;
+}
+
+sub canonicalise_suite () {
+    askmadison();
+}
+
+sub get_archive_dsc () {
+    my $vsn = askmadison();
+    # fixme madison does not show us the component
     my $prefix = substr($package, 0, $package =~ m/^l/ ? 4 : 1);
     $dscurl = "$mirror/pool/main/$prefix/$package/${package}_$vsn.dsc";
 #print DEBUG Dumper($pdodata, $&, $dscurl);
@@ -429,17 +444,20 @@ sub dopush () {
         die "$pat ?" unless @cs==1;
        ($changesfile) = @cs;
     }
+    my $tag = debiantag($dsc->{Version});
+    runcmd_ordryrun @git, qw(push),$remotename,"HEAD:".lref(uploadbranch());
     if ($sign) {
        my @tag_cmd = (@git, qw(tag -s -m),
                       "Release $dsc->{Version} for $suite [dgit]");
        push @tag_cmd, qw(-u),$keyid if defined $keyid;
+       push @tag_cmd, $tag;
        runcmd_ordryrun @tag_cmd;
        my @debsign_cmd = @debsign;
        push @debsign_cmd, "-k$keyid" if defined $keyid;
        push @debsign_cmd, $changesfile;
        runcmd_ordryrun @debsign_cmd;
     }
-    runcmd_ordryrun @git, qw(push),$remotename,"HEAD:".lref(uploadbranch());
+    runcmd_ordryrun @git, qw(push),$remotename,"refs/tags/$tag";
     runcmd_ordryrun @dput, $changesfile;
 }
 
@@ -470,9 +488,11 @@ sub fetchpullargs () {
     if (@ARGV==0) {
        $suite = branchsuite();
        $suite ||= $clogp->{Distribution};
+       canonicalise_suite();
        print "fetching from suite $suite\n";
     } elsif (@ARGV==1) {
        ($suite) = @ARGV;
+       canonicalise_suite();
     } else {
        die;
     }
@@ -493,6 +513,7 @@ sub cmd_push {
     $package = $clogp->{Source};
     if (@ARGV==0) {
        $suite = $clogp->{Distribution};
+       canonicalise_suite();
     } else {
        die;
     }
@@ -502,6 +523,8 @@ sub cmd_push {
 sub cmd_build {
     my $clogp = parsechangelog();
     $suite = $clogp->{Distribution};
+    $package = $clogp->{Source};
+    canonicalise_suite();
     runcmd_ordryrun
        qw(git-buildpackage -us -uc --git-no-sign-tags),
             "--git-debian-branch=".uploadbranch(),