summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-01-10 14:22:55 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2017-01-10 14:57:31 +0000
commitf233a3d733538a94a042b9f3c3dc0339c8473ab8 (patch)
treef6452b447313acc4830f21481250c2c3e0a37dac /dgit
parent54eabf5833c128f7158550c37e4fef9c4d5ef846 (diff)
dgit: dsc download handling: save as ,fetch if need be
* Pass \$refetched to complete_file_from_dsc, so that we refetch files whose hashes are wrong. * When saving files we refetched, save them as F,fetch if saving them as F gives EEXIST. So we can save refetched files. * When looking for files to reuse, look for F,fetch first. We do this only here in generate_commits_from_dsc, not in ensure_we_have_orig. This is because, in practice, this all won't be very effective for origs which need to be referred to by various .dscs. The main use case is when the user did a build without changing the version number. This would otherwise break fetch: Closes:#850824. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'dgit')
-rwxr-xr-xdgit46
1 files changed, 34 insertions, 12 deletions
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