chiark / gitweb /
dgit: Put (?: ) around $cleanmode_re and use qr{}.
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 8df8f761baf9347ce341102b0fd5229aaf4fb03d..de14c1ef0478eade067b3c5c4797629dbcf63d0a 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -101,7 +101,7 @@ our %forceopts = map { $_=>0 }
 our %format_ok = map { $_=>1 } ("1.0","3.0 (native)","3.0 (quilt)");
 
 our $suite_re = '[-+.0-9a-z]+';
-our $cleanmode_re = 'dpkg-source(?:-d)?|git|git-ff|check|none';
+our $cleanmode_re = qr{(?:dpkg-source(?:-d)?|git|git-ff|check|none)};
 
 our $git_authline_re = '^([^<>]+) \<(\S+)\> (\d+ [-+]\d+)$';
 our $splitbraincache = 'dgit-intern/quilt-cache';
@@ -790,6 +790,9 @@ sub git_get_config ($) {
        @$l==1 or badcfg
            f_ "multiple values for %s (in %s git config)", $c, $src
            if @$l > 1;
+       $l->[0] =~ m/\n/ and badcfg f_
+ "value for config option %s (in %s git config) contains newline(s)!",
+            $c, $src;
        return $l->[0];
     }
     return undef;
@@ -3825,6 +3828,17 @@ sub check_not_dirty () {
        }
     }
 
+    my @cmd = (@git, qw(status -uall --ignored --porcelain));
+    push @cmd, qw(debian/source/format debian/source/options);
+    push @cmd, @forbid;
+
+    my $bad = cmdoutput @cmd;
+    if (length $bad) {
+       fail +(__
+ "you have uncommitted changes to critical files, cannot continue:\n").
+              $bad;
+    }
+
     return if $includedirty;
 
     git_check_unmodified();
@@ -7345,7 +7359,7 @@ sub parseopts_late_defaults () {
        $cleanmode //= 'dpkg-source';
 
        badcfg f_ "unknown clean-mode \`%s'", $cleanmode unless
-           $cleanmode =~ m/^($cleanmode_re)$(?!\n)/s;
+           $cleanmode =~ m/$cleanmode_re/;
     }
 
     $buildproductsdir //= access_cfg('build-products-dir', 'RETURN-UNDEF');