[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug #625789: dpkg-source: --extend-diff-ignore doesn't work as expected



Gilles Filippini a écrit , Le -10/01/-28163 20:59:
> Trying not to include .gitignore into my source package using a
> debian/source/local-options file with:
>  extend-diff-ignore = '\.gitignore'
> 
> It doesn't work:
>  $ DIST=sid git-buildpackage --git-builder="git-pbuilder" --git-ignore-new
>  (...)
>   dpkg-source -i(?:^|/)\.git(attributes)?(?:$|/.*$) -I.git -b xf86-video-glamo-0.0.0+20100630.git16af3c00
>  dpkg-source: info: using options from xf86-video-glamo-0.0.0+20100630.git16af3c00/debian/source/local-options: --extend-diff-ignore=\.gitignore
>  dpkg-source: warning: no source format specified in debian/source/format, see dpkg-source(1)
>  dpkg-source: info: using source format `1.0'
>  dpkg-source: info: building xf86-video-glamo using existing xf86-video-glamo_0.0.0+20100630.git16af3c00.orig.tar.gz
>  dpkg-source: info: building xf86-video-glamo in xf86-video-glamo_0.0.0+20100630.git16af3c00-3.diff.gz
>  dpkg-source: warning: the diff modifies the following upstream files: 
>   .gitignore
>  dpkg-source: info: use the '3.0 (quilt)' format to have separate and documented changes to upstream files, see dpkg-source(1)
>  dpkg-source: info: building xf86-video-glamo in xf86-video-glamo_0.0.0+20100630.git16af3c00-3.dsc
>   dpkg-genchanges -S >../xf86-video-glamo_0.0.0+20100630.git16af3c00-3_source.changes
> 
> It doesn't work from the command line either:
>  $ rm xf86-video-glamo-0.0.0+20100630.git16af3c00/debian/source/local-options 
>  $ dpkg-source -i'(?:^|/)\.git(attributes)?(?:$|/.*$)' --extend-diff-ignore='\.gitignore' -I.git -b xf86-video-glamo-0.0.0+20100630.git16af3c00/
>  dpkg-source: avertissement: aucun format source indiqué dans debian/source/format, voir dpkg-source(1)
>  dpkg-source: info: utilisation du format source « 1.0 »
>  dpkg-source: info: construction de xf86-video-glamo à partir de xf86-video-glamo_0.0.0+20100630.git16af3c00.orig.tar.gz
>  dpkg-source: info: construction de xf86-video-glamo dans xf86-video-glamo_0.0.0+20100630.git16af3c00-3.diff.gz
>  dpkg-source: avertissement: le fichier de différences modifie les fichiers amont suivants : 
>   .gitignore
>  dpkg-source: info: choisissez le format « 3.0 (quilt) » pour utiliser des modifications séparées et documentées dans les sources amont, voir dpkg-source(1)
>  dpkg-source: info: construction de xf86-video-glamo dans xf86-video-glamo_0.0.0+20100630.git16af3c00-3.dsc
> 
> But forcing everything into one diff-ignore regex does work:
>  $ dpkg-source -i'(?:^|/)\.git(attributes)?(?:$|/.*$)|\.gitignore' -I.git -b xf86-video-glamo-0.0.0+20100630.git16af3c00/
>  dpkg-source: avertissement: aucun format source indiqué dans debian/source/format, voir dpkg-source(1)
>  dpkg-source: info: utilisation du format source « 1.0 »
>  dpkg-source: info: construction de xf86-video-glamo à partir de xf86-video-glamo_0.0.0+20100630.git16af3c00.orig.tar.gz
>  dpkg-source: info: construction de xf86-video-glamo dans xf86-video-glamo_0.0.0+20100630.git16af3c00-3.diff.gz
>  dpkg-source: info: construction de xf86-video-glamo dans xf86-video-glamo_0.0.0+20100630.git16af3c00-3.dsc

The attached patch appears to solve my problem, with
--extend-diff-ignore specified either from the command line or from a
debian/source/[local-]options file.

Rationals are:
* options from the command line should be interpreted first
* then should come options from debian/source/options
* and finally options from debian/source/local-options
* --extend-diff-ignore should actually extend diff-ignore instead of the
default diff-ignore regex.

Please consider including it.

Thanks,

_g.
--- /usr/bin/dpkg-source	2011-04-16 03:54:49.000000000 +0200
+++ ./dpkg-source	2011-05-06 01:41:43.000000000 +0200
@@ -113,7 +113,7 @@
 	"options" => qr/^--(?:format=|unapply-patches$|abort-on-upstream-changes$)/,
 	"local-options" => qr/^--format=/,
     };
-    foreach my $filename ("local-options", "options") {
+    foreach my $filename ("options", "local-options") {
 	my $conf = Dpkg::Conf->new();
 	my $optfile = File::Spec->catfile($dir, "debian", "source", $filename);
 	next unless -f $optfile;
@@ -122,7 +122,7 @@
 	if (@$conf) {
 	    info(_g("using options from %s: %s"), $optfile, join(" ", @$conf))
 		unless $options{'opmode'} eq "--print-format";
-	    unshift @options, @$conf;
+	    push @options, @$conf;
 	}
     }
 }
@@ -157,7 +157,11 @@
     } elsif (m/^-(?:i|-diff-ignore(?:$|=))(.*)$/) {
         $options{'diff_ignore_regexp'} = $1 ? $1 : $Dpkg::Source::Package::diff_ignore_default_regexp;
     } elsif (m/^--extend-diff-ignore=(.+)$/) {
-	$Dpkg::Source::Package::diff_ignore_default_regexp .= "|$1";
+        if ($options{'diff_ignore_regexp'}) {
+            $options{'diff_ignore_regexp'} .= "|$1";
+        } else {
+            $options{'diff_ignore_regexp'} = $Dpkg::Source::Package::diff_ignore_default_regexp . "|$1";
+        }
     } elsif (m/^-(?:I|-tar-ignore=)(.+)$/) {
         push @{$options{'tar_ignore'}}, $1;
     } elsif (m/^-(?:I|-tar-ignore)$/) {

Reply to: