diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2013-09-12 00:10:50 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2013-09-12 00:10:50 +0100 |
commit | 2baa64c36aedd47d06aa853ef780dbcffa7131bb (patch) | |
tree | 05800d3a7962f065fe00a1fa6ad4e585f0ba6ae5 | |
parent | 07cb0f6806a69f80bd3c70abb4beff83babe4cac (diff) |
More comprehensive warnings in many cases of archive skew.
-rw-r--r-- | debian/changelog | 1 | ||||
-rwxr-xr-x | dgit | 38 |
2 files changed, 35 insertions, 4 deletions
diff --git a/debian/changelog b/debian/changelog index 507d2c1..89b5c1f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,7 @@ dgit (0.15) unstable; urgency=low * Provide `dgit version' and `--version'. Closes: #721654. * Better handling of packages pushed using dgit and stuck in NEW. (And, use of `--new' is not needed with fetch.) Closes: #722199. + * More comprehensive warnings in many cases of archive skew. -- @@ -131,7 +131,7 @@ sub url_get { return $r->decoded_content(); } -our ($dscdata,$dscurl,$dsc); +our ($dscdata,$dscurl,$dsc,$skew_warning_vsn); sub printcmd { my $fh = shift @_; @@ -450,7 +450,10 @@ sub get_archive_dsc () { my ($vsn,$subpath) = @$vinfo; $dscurl = access_cfg('mirror').$subpath; $dscdata = url_get($dscurl); - next unless defined $dscdata; + if (!$dscdata) { + $skew_warning_vsn = $vsn if !defined $skew_warning_vsn; + next; + } my $dscfh = new IO::File \$dscdata, '<' or die $!; print DEBUG Dumper($dscdata) if $debug>1; $dsc = parsecontrolfh($dscfh,$dscurl, allow_pgp=>1); @@ -750,12 +753,20 @@ END $hash = $lastpush_hash; print STDERR <<END or die $!; -Package not found in the archive, but has allegedly been -pushed/uploaded using dgit. +Package not found in the archive, but has allegedly been pushed using dgit. $later_warning_msg END } else { print DEBUG "nothing found!\n"; + if (defined $skew_warning_vsn) { + print STDERR <<END or die $!; + +Warning: relevant archive skew detected. +Archive allegedly contains $skew_warning_vsn +But we were not able to obtain any version from the archive or git. + +END + } return 0; } print DEBUG "current hash=$hash\n"; @@ -764,6 +775,25 @@ END " (archive's version left in DGIT_ARCHIVE)" unless is_fast_fwd($lastpush_hash, $hash); } + if (defined $skew_warning_vsn) { + mkpath '.git/dgit'; + print DEBUG "SKEW CHECK WANT $skew_warning_vsn\n"; + my $clogf = ".git/dgit/changelog.tmp"; + runcmd shell_cmd "exec >$clogf", + @git, qw(cat-file blob), "$hash:debian/changelog"; + my $gotclogp = parsechangelog("-l$clogf"); + my $got_vsn = getfield $gotclogp, 'Version'; + print DEBUG "SKEW CHECK GOT $got_vsn\n"; + if (version_compare_string($got_vsn, $skew_warning_vsn) < 0) { + print STDERR <<END or die $!; + +Warning: archive skew detected. Using the available version: +Archive allegedly contains $skew_warning_vsn +We were able to obtain only $got_vsn + +END + } + } if ($lastpush_hash ne $hash) { my @upd_cmd = (@git, qw(update-ref -m), 'dgit fetch', lrref(), $hash); if (!$dryrun) { |