Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 07 May 2006 20:15:34 +0400
From:      Sergey Matveychuk <sem@FreeBSD.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/96923: [patch] devel/portlint lacks distinfo file check
Message-ID:  <E1Fcluw-000B7j-Oo@solem.sem-home.ciam.ru>
Resent-Message-ID: <200605071620.k47GKGhX071249@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         96923
>Category:       ports
>Synopsis:       [patch] devel/portlint lacks distinfo file check
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Sun May 07 16:20:16 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Sergey Matveychuk
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD solem.sem-home.ciam.ru 7.0-CURRENT FreeBSD 7.0-CURRENT #33: Sat Apr 29 14:09:38 MSD 2006 root@solem.sem-home.ciam.ru:/usr/obj/usr/src/sys/SOLEM i386


	
>Description:
	
	portlint does not checks distinfo file.
	The patch add the feature to portlint.
	I've tested it running portlint on all ports tree.

	There are a couple things I'm not sure:
	1) May be warning of IGNOREFILES should be moved in other place?
	2) Syntax of FATAL and WARN message. Check it please.
>How-To-Repeat:
	
>Fix:

	

--- portlint.diff begins here ---
Index: Makefile
===================================================================
RCS file: /home/pcvs/ports/devel/portlint/Makefile,v
retrieving revision 1.108
diff -u -r1.108 Makefile
--- Makefile	7 Apr 2006 00:08:00 -0000	1.108
+++ Makefile	7 May 2006 12:42:07 -0000
@@ -8,7 +8,7 @@
 #
 
 PORTNAME=	portlint
-PORTVERSION=	2.8.7
+PORTVERSION=	2.8.8
 CATEGORIES=	devel
 MASTER_SITES=	# none
 DISTFILES=	# none
Index: src/portlint.pl
===================================================================
RCS file: /home/pcvs/ports/devel/portlint/src/portlint.pl,v
retrieving revision 1.88
diff -u -r1.88 portlint.pl
--- src/portlint.pl	12 Mar 2006 19:19:43 -0000	1.88
+++ src/portlint.pl	7 May 2006 12:42:08 -0000
@@ -177,6 +177,7 @@
 	PKGREQ PKGMESSAGE MD5_FILE .CURDIR INSTALLS_SHLIB USE_AUTOTOOLS
 	INDEXFILE PKGORIGIN CONFLICTS PKG_VERSION PKGINSTALLVER
 	PLIST_FILES OPTIONS INSTALLS_OMF USE_GETTEXT USE_RC_SUBR
+	DIST_SUBDIR ALLFILES IGNOREFILES CHECKSUM_ALGORITHMS
 );
 
 my $cmd = join(' -V ', "make $makeenv MASTER_SITE_BACKUP=''", @varlist);
@@ -257,7 +258,7 @@
 my %checker = (
 	$makevar{DESCR} => \&checkdescr,
 	'Makefile' => \&checkmakefile,
-	$makevar{MD5_FILE} => \&TRUE
+	$makevar{MD5_FILE} => \&checkdistinfo
 );
 if ($extrafile) {
 	my @files = (
@@ -502,6 +503,74 @@
 exit $err;
 
 #
+# distinfo
+#
+sub checkdistinfo {
+	my($file) = @_;
+	my($dist_subdir) = $makevar{DIST_SUBDIR};
+	my(@allfiles) = split (/\s+/, $makevar{ALLFILES});
+	my %ignorefiles = ();
+	my %algorithms = ();
+	my %records = ();
+
+	foreach my $i (split (/\s+/, $makevar{IGNOREFILES})) {
+		$ignorefiles{$i} = 1;
+	}
+	foreach my $i (split (/\s+/, uc ($makevar{CHECKSUM_ALGORITHMS}))) {
+		$algorithms{$i} = 1;
+	}
+
+	if (scalar (%ignorefiles)) {
+		&perror("WARN: Found IGNOREFILES. It's not recomended.");
+	}
+
+	open(IN, "< $file") || return 0;
+	while (<IN>) {
+		if (/^\s*$/) {
+			&perror("FATAL: $file [$.]: a blank line.");
+			next;
+		}
+		m/(\S+)\s+\((\S+)\)\s+=\s+(\S+)/;
+
+		if ($1 ne "" && $2 ne "" && $3 ne "") {
+			my ($tag, $path, $value) = ($1, $2, $3);
+			$records{$path}{$tag} = $value;
+
+			if (!$algorithms{$tag} && $tag ne "SIZE") {
+				&perror("FATAL: $file [$.]: unsupported checksum algorithm found: $tag.");
+			}
+		} else {
+			&perror("FATAL: $file [$.]: line format error.");
+		}
+	}
+	close(IN);
+
+	# For all files check SIZE and checksums
+	foreach my $f (@allfiles) {
+		# Remove hindering chars from DISTNAME
+		$f =~ s/['\\]//g;
+
+		my $path = $f;
+		$path = "$dist_subdir/$f" if $dist_subdir;
+		if (!defined($records{$path}{SIZE}) && !$ignorefiles{$f}) {
+			&perror("FATAL: $file has no SIZE record for $path.");
+		}
+		my $n = 0;
+		foreach my $alg (keys %algorithms) {
+			$n++ if exists($records{$path}{$alg});
+		}
+		if ($n == 0) {
+			&perror("FATAL: $file has no checksum record for $path.");
+		}
+		if ($n < scalar(keys %algorithms)) {
+			&perror("WARN: $file has checksum records not for all supported ".
+				"algorithms (".join(" ",keys %algorithms).") for $path.");
+		}
+	}
+	return 1;
+}
+
+#
 # pkg-descr
 #
 sub checkdescr {
--- portlint.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1Fcluw-000B7j-Oo>