summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog3
-rwxr-xr-xdgit46
2 files changed, 37 insertions, 12 deletions
diff --git a/debian/changelog b/debian/changelog
index 52e54ce..607b2cd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,9 @@ dgit (3.1~) unstable; urgency=medium
* dgit: Do not nedlessly re-fetch the rewrite map.
* dgit: After downloading .debian.* files, save them in `..', too
(ie do this not just for .origs).
+ * dgit: When fetching, refetch files with hash mismatches (and save them
+ as `...,fetch'), so we can distinguish them from any built locally.
+ Closes:#850824.
Test suite:
* Add test for import-dsc with default distro. (Detects #850781.)
diff --git a/dgit b/dgit
index 0cd122e..a51c878 100755
--- a/dgit
+++ b/dgit
@@ -2072,21 +2072,43 @@ sub generate_commits_from_dsc () {
die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#;
my $upper_f = "../../../../$f";
- printdebug "considering linking $f: ";
-
- link_ltarget $upper_f, $f
- or ((printdebug "($!) "), 0)
- or $!==&ENOENT
- or die "$f $!";
-
- printdebug "linked.\n";
+ printdebug "considering reusing $f: ";
+
+ if (link_ltarget "$upper_f,fetch", $f) {
+ printdebug "linked (using ...,fetch).\n";
+ } elsif ((printdebug "($!) "),
+ $! != ENOENT) {
+ fail "accessing ../$f,fetch: $!";
+ } elsif (link_ltarget $upper_f, $f) {
+ printdebug "linked.\n";
+ } elsif ((printdebug "($!) "),
+ $! != ENOENT) {
+ fail "accessing ../$f: $!";
+ } else {
+ printdebug "absent.\n";
+ }
- complete_file_from_dsc('.', $fi)
+ my $refetched;
+ complete_file_from_dsc('.', $fi, \$refetched)
or next;
- link $f, $upper_f
- or $!==&EEXIST
- or die "$f $!";
+ printdebug "considering saving $f: ";
+
+ if (link $f, $upper_f) {
+ printdebug "linked.\n";
+ } elsif ((printdebug "($!) "),
+ $! != EEXIST) {
+ fail "saving ../$f: $!";
+ } elsif (!$refetched) {
+ printdebug "no need.\n";
+ } elsif (link $f, "$upper_f,fetch") {
+ printdebug "linked (using ...,fetch).\n";
+ } elsif ((printdebug "($!) "),
+ $! != EEXIST) {
+ fail "saving ../$f,fetch: $!";
+ } else {
+ printdebug "cannot.\n";
+ }
}
# We unpack and record the orig tarballs first, so that we only