chiark / gitweb /
Quirks mechanism
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 7752d824f6c30023304ac8a0716d84f67d41a2eb..bb1d217e962d238a23b5df5f8c51887708cf06dd 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -489,16 +489,30 @@ sub cfg {
     badcfg "need value for one of: @_";
 }
 
-sub access_distro () {
+sub access_basedistro () {
     return cfg("dgit-suite.$isuite.distro",
               "dgit.default.distro");
 }
 
+sub access_quirk () {
+    # returns (quirk name, distro to use instead, quirk-specific info)
+    my $basedistro = access_basedistro();
+    return ('none',$basedistro);
+}
+
+sub access_distro () {
+    return (access_quirk())[1];
+}
+
 sub access_cfg (@) {
     my (@keys) = @_;
+    my $basedistro = access_basedistro();
     my $distro = $idistro || access_distro();
-    my $value = cfg(map { ("dgit-distro.$distro.$_",
-                          "dgit.default.$_") } @keys);
+    my $value = cfg(map {
+       ("dgit-distro.$distro.$_",
+        "dgit-distro.$basedistro.$_",
+        "dgit.default.$_")
+                   } @keys);
     return $value;
 }
 
@@ -1734,6 +1748,17 @@ sub build_maybe_quilt_fixup () {
     chomp;
     return unless madformat($_);
     # sigh
+    
+    my @cmd = (@git, qw(ls-files --exclude-standard -iodm));
+    my $problems = cmdoutput @cmd;
+    if (length $problems) {
+       print STDERR "problematic files:\n";
+       print STDERR "  $_\n" foreach split /\n/, $problems;
+       fail "Cannot do quilt fixup in tree containing ignored files.  ".
+           "Perhaps your package's clean target is broken, in which".
+           " case -wg (which says to use git-clean -xdf) may help.";
+    }
+
     my $clogp = parsechangelog();
     my $version = getfield $clogp, 'Version';
     my $author = getfield $clogp, 'Maintainer';