diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2017-01-10 14:22:55 +0000 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2017-01-10 14:57:31 +0000 |
commit | f233a3d733538a94a042b9f3c3dc0339c8473ab8 (patch) | |
tree | f6452b447313acc4830f21481250c2c3e0a37dac /dgit | |
parent | 54eabf5833c128f7158550c37e4fef9c4d5ef846 (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-x | dgit | 46 |
1 files changed, 34 insertions, 12 deletions
@@ -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 |