chiark / gitweb /
dgit: fix a reference to parent directory
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 23e66b2cf4b34638c178c8a272c7c66dd4258957..3d9e5f68fe907ddde2f7df4213faee264859eb70 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -2,8 +2,8 @@
 # dgit
 # Integration between git and Debian-style archives
 #
-# Copyright (C)2013-2017 Ian Jackson
-# Copyright (C)2017 Sean Whitton
+# Copyright (C)2013-2018 Ian Jackson
+# Copyright (C)2017-2018 Sean Whitton
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -275,14 +275,16 @@ sub quiltmode_splitbrain () {
 }
 
 sub opts_opt_multi_cmd {
+    my $extra = shift;
     my @cmd;
     push @cmd, split /\s+/, shift @_;
+    push @cmd, @$extra;
     push @cmd, @_;
     @cmd;
 }
 
 sub gbp_pq {
-    return opts_opt_multi_cmd @gbp_pq;
+    return opts_opt_multi_cmd [], @gbp_pq;
 }
 
 sub dgit_privdir () {
@@ -4756,8 +4758,6 @@ sub cmd_push {
     dopush();
 }
 
-our $sourcechanges;
-
 #---------- remote commands' implementation ----------
 
 sub pre_remote_push_build_host {
@@ -5047,6 +5047,7 @@ sub i_want_signed_dsc_changes {
 #---------- building etc. ----------
 
 our $version;
+our $sourcechanges;
 our $dscfn;
 
 #----- `3.0 (quilt)' handling -----
@@ -6104,6 +6105,7 @@ sub build_or_push_prep_early () {
     $isuite = getfield $clogp, 'Distribution';
     $package = getfield $clogp, 'Source';
     $version = getfield $clogp, 'Version';
+    $dscfn = dscfn($version);
 }
 
 sub build_prep_early () {
@@ -6352,7 +6354,7 @@ sub cmd_gbp_build {
            $gbp_build[0] = 'gbp buildpackage';
        }
     }
-    my @cmd = opts_opt_multi_cmd @gbp_build;
+    my @cmd = opts_opt_multi_cmd [], @gbp_build;
 
     push @cmd, (qw(-us -uc --git-no-sign-tags),
                "--git-builder=".(shellquote @dbp));
@@ -6394,22 +6396,6 @@ sub cmd_gbp_build {
 }
 sub cmd_git_build { cmd_gbp_build(); } # compatibility with <= 1.0
 
-sub move_dsc_to_bpd ($) {
-    my ($dscfn) = @_;
-    printdebug "moving $dscfn and all referenced files to ".bpd_abs()."\n";
-    $dsc = parsecontrol($dscfn, "source package");
-    foreach my $l (split /\n/, getfield $dsc, 'Files') {
-        $l =~ m/\S+$/ or next;
-        $l =~ s/.* //;
-        printdebug "found $l - renaming\n";
-        rename "$l", bpd_abs()."/$l"
-          or fail "put in place new source file ($l): $!";
-    }
-    printdebug "moving $dscfn to ".bpd_abs()."/$dscfn\n";
-    rename "$dscfn", bpd_abs()."/$dscfn"
-      or fail "put in place new source file ($dscfn): $!";
-}
-
 sub building_source_in_playtree {
     # If $includedirty, we have to build the source package from the
     # working tree, not a playtree, so that uncommitted changes are
@@ -6429,7 +6415,6 @@ sub build_source {
        unlink "$buildproductsdir/$sourcechanges" or $!==ENOENT
            or fail "remove $sourcechanges: $!";
     }
-    $dscfn = dscfn($version);
     my @cmd = (@dpkgsource, qw(-b --));
     my $leafdir;
     if (building_source_in_playtree()) {
@@ -6457,9 +6442,23 @@ sub build_source {
       'exec >../$1; shift; exec "$@"','x', $sourcechanges,
       @dpkggenchanges, qw(-S), changesopts();
     changedir '..';
-    move_dsc_to_bpd($dscfn);
-    rename "$sourcechanges", bpd_abs()."/$sourcechanges"
-       or fail "put in place source changes file ($sourcechanges): $!";
+
+    printdebug "moving $dscfn, $sourcechanges, etc. to ".bpd_abs()."\n";
+    $dsc = parsecontrol($dscfn, "source package");
+
+    my $mv = sub {
+       my ($why, $l) = @_;
+        printdebug " renaming ($why) $l\n";
+        rename "$l", bpd_abs()."/$l"
+           or fail "put in place new built file ($l): $!";
+    };
+    foreach my $l (split /\n/, getfield $dsc, 'Files') {
+        $l =~ m/\S+$/ or next;
+       $mv->('Files', $&);
+    }
+    $mv->('dsc', $dscfn);
+    $mv->('changes', $sourcechanges);
+
     changedir $maindir;
 }
 
@@ -6498,9 +6497,9 @@ sub cmd_sbuild {
     midbuild_checkchanges();
     in_bpd {
        if (act_local()) {
-           stat_exists $dscfn or fail "$dscfn (in parent directory): $!";
+           stat_exists $dscfn or fail "$dscfn (in build products dir): $!";
            stat_exists $sourcechanges
-               or fail "$sourcechanges (in parent directory): $!";
+               or fail "$sourcechanges (in build products dir): $!";
        }
        runcmd_ordryrun_local @sbuild, qw(-d), $isuite, @ARGV, $dscfn;
     };