From: Ian Jackson Date: Thu, 15 Aug 2013 16:31:34 +0000 (+0100) Subject: suite canonicalisation, other fixes X-Git-Tag: debian/0.2~42 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=845a554b412c6677b7341788e5f4d8965b969082 suite canonicalisation, other fixes --- diff --git a/TODO b/TODO index cff119be..080502d9 100644 --- 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 f02bb30a..c255e1e1 100755 --- 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(),