summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2013-09-12 00:10:50 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2013-09-12 00:10:50 +0100
commit2baa64c36aedd47d06aa853ef780dbcffa7131bb (patch)
tree05800d3a7962f065fe00a1fa6ad4e585f0ba6ae5 /dgit
parent07cb0f6806a69f80bd3c70abb4beff83babe4cac (diff)
More comprehensive warnings in many cases of archive skew.
Diffstat (limited to 'dgit')
-rwxr-xr-xdgit38
1 files changed, 34 insertions, 4 deletions
diff --git a/dgit b/dgit
index 123c2d5..1838f2f 100755
--- a/dgit
+++ b/dgit
@@ -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) {