X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=8c7f288a75597f8086d02ecb25a3be1a43416226;hp=5b223afb2d7080a26ed08cebecb2cabd922a4f36;hb=0457c2d771ef6fe6c0883344add9dd4da0c60917;hpb=327b277d06a194a614b6cc3f872c8a678292d7bc diff --git a/dgit b/dgit index 5b223afb..8c7f288a 100755 --- 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; @@ -3817,12 +3820,25 @@ sub pull () { } sub check_not_dirty () { - foreach my $f (qw(local-options local-patch-header)) { - if (stat_exists "debian/source/$f") { - fail f_ "git tree contains debian/source/%s", $f; + my @forbid = qw(local-options local-patch-header); + @forbid = map { "debian/source/$_" } @forbid; + foreach my $f (@forbid) { + if (stat_exists $f) { + fail f_ "git tree contains %s", $f; } } + 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(); @@ -7339,11 +7355,14 @@ sub parseopts_late_defaults () { if (!defined $cleanmode) { local $access_forpush; - $cleanmode = access_cfg('clean-mode', 'RETURN-UNDEF'); + $cleanmode = access_cfg('clean-mode-newer', 'RETURN-UNDEF'); + $cleanmode = undef if $cleanmode && $cleanmode !~ m/^$cleanmode_re$/; + + $cleanmode //= access_cfg('clean-mode', 'RETURN-UNDEF'); $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'); @@ -7376,7 +7395,10 @@ $cmd =~ y/-/_/; my $pre_fn = ${*::}{"pre_$cmd"}; $pre_fn->() if $pre_fn; -record_maindir if $invoked_in_git_tree; +if ($invoked_in_git_tree) { + changedir_git_toplevel(); + record_maindir(); +} git_slurp_config(); my $fn = ${*::}{"cmd_$cmd"};