chiark / gitweb /
dgit: complete_file_from_dsc: Introduce $checkhash
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 824e9d1b3ccaaf010c25e4102bf6d3e2e9d04655..39d439db059ca0f834bbe29223aabf71f3c16076 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -2070,10 +2070,11 @@ sub generate_commits_from_dsc () {
     foreach my $fi (@dfi) {
        my $f = $fi->{Filename};
        die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#;
+       my $upper_f = "../../../../$f";
 
        printdebug "considering linking $f: ";
 
-       link_ltarget "../../../../$f", $f
+       link_ltarget $upper_f, $f
            or ((printdebug "($!) "), 0)
            or $!==&ENOENT
            or die "$f $!";
@@ -2083,11 +2084,9 @@ sub generate_commits_from_dsc () {
        complete_file_from_dsc('.', $fi)
            or next;
 
-       if (is_orig_file_in_dsc($f, \@dfi)) {
-           link $f, "../../../../$f"
-               or $!==&EEXIST
-               or die "$f $!";
-       }
+       link $f, $upper_f
+           or $!==&EEXIST
+           or die "$f $!";
     }
 
     # We unpack and record the orig tarballs first, so that we only
@@ -2466,6 +2465,19 @@ sub complete_file_from_dsc ($$) {
     my $tf = "$dstdir/$f";
     my $downloaded = 0;
 
+    my $checkhash = sub {
+       open F, "<", "$tf" or die "$tf: $!";
+       $fi->{Digester}->reset();
+       $fi->{Digester}->addfile(*F);
+       F->error and die $!;
+       my $got = $fi->{Digester}->hexdigest();
+       $got eq $fi->{Hash} or
+           fail "file $f has hash $got but .dsc".
+               " demands hash $fi->{Hash} ".
+               ($downloaded ? "(got wrong file from archive!)"
+                : "(perhaps you should delete this file?)");
+    };
+
     if (stat_exists $tf) {
        progress "using existing $f";
     } else {
@@ -2480,16 +2492,7 @@ sub complete_file_from_dsc ($$) {
        $downloaded = 1;
     }
 
-    open F, "<", "$tf" or die "$tf: $!";
-    $fi->{Digester}->reset();
-    $fi->{Digester}->addfile(*F);
-    F->error and die $!;
-    my $got = $fi->{Digester}->hexdigest();
-    $got eq $fi->{Hash} or
-       fail "file $f has hash $got but .dsc".
-           " demands hash $fi->{Hash} ".
-           ($downloaded ? "(got wrong file from archive!)"
-            : "(perhaps you should delete this file?)");
+    $checkhash->();
 
     return 1;
 }
@@ -2843,8 +2846,10 @@ END
     };
 
     if (parse_cfg_bool 'rewrite-map-enable', 'true', $rewrite_enable) {
-       my $lrf = $do_fetch->("rewrite map", $rewritemap) or return;
-       $mapref = $lrf.'/'.$rewritemap;
+       if (!defined $mapref) {
+           my $lrf = $do_fetch->("rewrite map", $rewritemap) or return;
+           $mapref = $lrf.'/'.$rewritemap;
+       }
        my $rewritemapdata = git_cat_file $mapref.':map';
        if (defined $rewritemapdata
            && $rewritemapdata =~ m/^$dsc_hash(?:[ \t](\w+))/m) {
@@ -6103,6 +6108,8 @@ Specify  +$specbranch to overwrite, discarding existing history
 END
        if $oldhash && !$force;
 
+    notpushing();
+
     my @dfi = dsc_files_info();
     foreach my $fi (@dfi) {
        my $f = $fi->{Filename};