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

Bug#478930: lintian: Check for rfc2822 debian/copyright (http://wiki.debian.org/Proposals/CopyrightFormat)



On Thu, May 01, 2008 at 09:45:34PM +0200, Mathieu Parent wrote:
> The files add checks for the proposal:
> http://wiki.debian.org/Proposals/CopyrightFormat

That specification seems to be still very volatile, from what I can see
from the changelog.

> # control-file -- lintian check script -*- perl -*-
> #
> # Copyright (C) 2004 Marc Brockschmidt

?

> 		# Check that every file in the tree has a license
> 		my $command = 'cd unpacked && find . -type f -a -not \( -false';
> 		foreach my $section (@data) {
> 			next if not $section->{files};
> 			#patterns are comma separated
> 			#TODO: manage quoted strings with comma in it
> 			$command .= ' -o -path ./'.join(' -o -path ./', split m/,\s/, $section->{files});
> 	
> 		}
> 		$command .= ' \) ; cd .. ';
> 		my $files_without_copyright = `$command`;
> 		if ($files_without_copyright) {
> 			foreach my $file (split '\n', $files_without_copyright) {
> 				tag 'debian-copyright-file-without-copyright', $file;
> 			}
> 		}

Hmm, there must be a better way to check that. I'm pretty sure we have a
list of files already available somewhere in the lintian working
directory. (If we haven't, we should)

> 		# Check that every pattern match something
> 		foreach my $section (@data) {
> 			#next section if this is not a files section
> 			next if not $section->{files};
> 			#files are comma separated
> 			#TODO: manage quoted strings (with comma in it)
> 			my @patterns = split m/,\s/, $section->{files} ;
> 			foreach my $pattern (@patterns) {
> 				if (not `ls -l && cd unpacked && find . -type f -a -path $pattern ; cd ..`) {
> 					tag 'debian-copyright-section-without-match', $pattern ;
> 				}
> 			}
> 		}
> 	}

Same here.

> Tag: debian-copyright-unknown-field
> Type: warning
> Info: The package contains a copyright file that as an unknown field.

Typo s/as/has/

> Tag: debian-copyright-file-without-copyright
> Type: warning
> Info: The package contains a copyright file that does match the specified file.

? That makes no sense.

> Tag: debian-copyright-section-without-match
> Type: warning
> Info: The package contains a copyright file which has a section which does
>  match any file.

s/does/doesn't/ maybe?

> 	# pgp sig? -> skip until end of signature
> 	elsif (m/^-----BEGIN PGP SIGNATURE/) {
> 	    while (<$COPYRIGHT>) {
> 		$line_number++;
> 		last if m/^-----END PGP SIGNATURE/o;
> 	    }
> 	}
> 	# other pgp control? -> skip until the next blank line
> 	elsif (m/^-----BEGIN PGP/) {
> 	    while (<$COPYRIGHT>) {
> 		$line_number++;
> 		last if /^\s*$/o;
> 	    }
> 	}

Since when can copyright files contain signatures?

> 	# new field?
> 	elsif (m/^(\S+):\s*(.*)$/o) {
> 	    my ($tag,$value) = (lc $1,$2);
> 	    #format-specification, files and notice always start a section
> 	    if($tag =~ /format-specification|files|notice/i) {

You already make an lc on $tag, no need to make all the regexes
case-insensitive.

> # not used

So why is it included?

> sub _ensure_file_is_sane {

Please use the one from Util.pm

>     my ($file) = @_;
> 
>     # if file exists and is not 0 bytes
>     if (-f $file and -s $file) {
> 	return 1;
>     }
>     return 0;
> }
> 
> # ------------------------
> 
> sub fail {

Please use the one from Util.pm

>     my $str = "internal error";
>     if (@_) {
> 	$str .= ": ".join( "\n", @_)."\n";
>     } elsif ($!) {
> 	$str .= ": $!\n";
>     } else {
> 	$str .= ".\n";
>     }
>     $! = 2; # set return code outside eval()
>     die $str;

Gruesse,
-- 
Frank Lichtenheld <djpig@debian.org>
www: http://www.djpig.de/



Reply to: