chiark / gitweb /
dgit: clean: Change matcbing of git to regexps
[dgit.git] / dgit
diff --git a/dgit b/dgit
index c62d1cc1e031c6e1177e84df7e5009e8d5ea3453..37d38618572b90ce5514941021ff00355059dc48 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -132,8 +132,8 @@ our (@mergechanges) = qw(mergechanges -f);
 our (@gbp_build) = ('');
 our (@gbp_pq) = ('gbp pq');
 our (@changesopts) = ('');
-our (@pbuilder) = ("sudo -E pbuilder");
-our (@cowbuilder) = ("sudo -E cowbuilder");
+our (@pbuilder) = ("sudo -E pbuilder","--no-source-only-changes");
+our (@cowbuilder) = ("sudo -E cowbuilder","--no-source-only-changes");
 
 our %opts_opt_map = ('dget' => \@dget, # accept for compatibility
                     'curl' => \@curl,
@@ -2197,6 +2197,12 @@ sub check_for_vendor_patches () {
                          __ "(nominal) distro being accessed");
 }
 
+sub check_bpd_exists () {
+    stat $buildproductsdir
+       or fail f_ "build-products-dir %s is not accessible: %s\n",
+       $buildproductsdir, $!;
+}
+
 sub generate_commits_from_dsc () {
     # See big comment in fetch_from_archive, below.
     # See also README.dsc-import.
@@ -3062,6 +3068,7 @@ END
 }
 
 sub fetch_from_archive () {
+    check_bpd_exists();
     ensure_setup_existing_tree();
 
     # Ensures that lrref() is what is actually in the archive, one way
@@ -3758,10 +3765,13 @@ sub clone ($) {
     }
     printdebug "clone main body\n";
 
-    canonicalise_suite();
-    my $hasgit = check_for_git();
     mkdir $dstdir or fail f_ "create \`%s': %s", $dstdir, $!;
     changedir $dstdir;
+    check_bpd_exists();
+
+    canonicalise_suite();
+    my $hasgit = check_for_git();
+
     runcmd @git, qw(init -q);
     record_maindir();
     setup_new_tree();
@@ -6259,9 +6269,9 @@ sub clean_tree () {
        runcmd_ordryrun_local @cmd;
        clean_tree_check_git_wd __
  "tree contains uncommitted files (after running rules clean)";
-    } elsif ($cleanmode eq 'git') {
+    } elsif ($cleanmode =~ m{^git(?!-)}) {
        runcmd_ordryrun_local @git, qw(clean -xdf);
-    } elsif ($cleanmode eq 'git-ff') {
+    } elsif ($cleanmode =~ m{^git-ff}) {
        runcmd_ordryrun_local @git, qw(clean -xdff);
     } elsif ($cleanmode =~ m{^check}) {
        clean_tree_check();
@@ -6303,6 +6313,7 @@ sub build_prep_early () {
 sub build_prep ($) {
     my ($wantsrc) = @_;
     build_prep_early();
+    check_bpd_exists();
     if (!building_source_in_playtree() || ($wantsrc & WANTSRC_BUILDER)) {
        # Clean the tree because we're going to use the contents of
        # $maindir.  (We trying to include dirty changes in the source
@@ -7192,6 +7203,12 @@ sub parseopts () {
                     ($om = $opts_opt_map{$1})) {
                push @ropts, $_;
                push @$om, $2;
+           } elsif (m/^--([-0-9a-z]+)\!:(.*)/s &&
+                    !$opts_opt_cmdonly{$1} &&
+                    ($om = $opts_opt_map{$1})) {
+               push @ropts, $_;
+               my $cmd = shift @$om;
+               @$om = ($cmd, grep { $_ ne $2 } @$om);
            } elsif (m/^--(gbp|dpm)$/s) {
                push @ropts, "--quilt=$1";
                $quilt_mode = $1;