pkgsrc-Bugs archive

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

pkg/25222: patch for pkglint (more checks on patch files)



>Number:         25222
>Category:       pkg
>Synopsis:       patch for pkglint (more checks on patch files)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sun Apr 18 11:24:00 UTC 2004
>Closed-Date:
>Last-Modified:
>Originator:     Roland Illig
>Release:        Linux 2.4.22-1-k7
>Organization:
>Environment:
System: Linux wwid 2.4.22-1-k7 #5 Sat Oct 4 14:11:12 EST 2003 i686 GNU/Linux
Architecture: i686

        
>Description:
This patch checks all files in the patches/ directory if they contain
exactly one patch per file. It also adds the "-q" (quiet) switch and
gets rid of the implicit global variables $opt_X.

        
>How-To-Repeat:
        
>Fix:
        
Index: pkglint.pl
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkglint/files/pkglint.pl,v
retrieving revision 1.101
diff -u -r1.101 pkglint.pl
--- pkglint.pl  15 Apr 2004 09:41:22 -0000      1.101
+++ pkglint.pl  18 Apr 2004 11:19:01 -0000
@@ -1,4 +1,4 @@
-#!@PERL@
+#!@PERL@ -w
 #
 # pkglint - lint for package directory
 #
@@ -36,12 +36,14 @@
 $rcsidstr = 'NetBSD';
 $localbase = '@PREFIX@';
 
-getopts('hINB:vV');
+%opts = ();
+getopts('hINB:qvV', \%opts);
 
-if ($opt_h) {
+if ($opts{"h"}) {
                ($prog) = ($0 =~ /([^\/]+)$/);
                print STDERR <<EOF;
-usage: $prog [-vIN] [-B#] [package_directory]
+usage: $prog [-qvIN] [-B#] [package_directory]
+       -q      quiet
        -v      verbose mode
        -V      version (@DISTVER@)
        -I      show Makefile (with all included files)
@@ -50,14 +52,15 @@
 EOF
                exit 0;
 };
-$verbose = 1   if $opt_v;
-$newpkg = 1    if $opt_N;
-$showmakefile = 1      if $opt_I;
-$contblank = $opt_B    if $opt_B;
+$quiet = 1     if $opts{"q"};
+$verbose = 1   if $opts{"v"};
+$newpkg = 1    if $opts{"N"};
+$showmakefile = 1      if $opts{"I"};
+$contblank = $opts{"B"}        if $opts{"B"};
 
 $portdir = shift || ".";
 
-if ($opt_V) {
+if ($opts{"V"}) {
        print "@DISTVER@\n";
        exit;
 }
@@ -132,7 +135,7 @@
 }
 
 # we need to handle the Makefile first to get some variables
-print "OK: checking Makefile.\n";
+print "OK: checking Makefile.\n" unless $quiet;
 if (! -f "$portdir/Makefile") {
        &perror("FATAL: no Makefile in \"$portdir\".");
 } else {
@@ -193,7 +196,7 @@
        }
 }
 foreach $i (@checker) {
-       print "OK: checking $i.\n";
+       print "OK: checking $i.\n" unless $quiet;
        if (! -f "$portdir/$i") {
                &perror("FATAL: no $i in \"$portdir\".");
        } else {
@@ -556,9 +559,9 @@
 }
 
 sub checkpatch {
-       local($file) = @_;
-       local($rcsidseen) = 0;
-       local($whole);
+       my ($file) = @_;
+       my ($rcsidseen, $whole, @lines);
+       $rcsidseen = 0;
 
        if ($file =~ /.*~$/) {
                &perror("WARN: is $file a backup file? If so, please remove it 
\n"
@@ -570,6 +573,7 @@
        while (<IN>) {
                $rcsidseen++ if /\$$rcsidstr[:\$]/;
                $whole .= $_;
+               push(@lines, $_);
        }
        if ($committer && $whole =~ 
/.\$(Author|Date|Header|Id|Locker|Log|Name|RCSfile|Revision|Source|State|NetBSD)(:.*\$|\$)/)
 { # XXX
                # RCS ID in very first line is ok, to identify version
@@ -583,6 +587,45 @@
                        "in patch $file.")
        }
        close(IN);
+
+       $files_in_patch = 0;
+       $patch_state = "";
+       foreach my $patch_line (@lines) {
+           chomp($patch_line);
+           if (index($patch_line, "--- ") == 0 && $patch_line !~ qr"^--- 
\d+,\d+ ----$") {
+               $line_type = "-";
+           } elsif (index($patch_line, "*** ") == 0 && $patch_line !~ 
qr"^\*\*\* \d+,\d+ \*\*\*\*$") {
+               $line_type = "*";
+           } elsif (index($patch_line, "+++ ") == 0) {
+               $line_type = "+";
+           } else {
+               $line_type = "";
+           }
+           if ($patch_state eq "*") {
+               if ($line_type eq "-") {
+                   $files_in_patch++;
+                   $patch_state = "";
+               } else {
+                   &perror("WARN: $i:$.: unknown patch format (might be an 
internal error)");
+               }
+           } elsif ($patch_state eq "-") {
+               if ($line_type eq "+") {
+                   $files_in_patch++;
+                   $patch_state = "";
+               } else {
+                   &perror("WARN: $i:$.: unknown patch format (might be an 
internal error)");
+               }
+           } elsif ($patch_state eq "") {
+               $patch_state = $line_type;
+           }
+           #printf("%s:%d: state=(%s), line=(%s)\n", $i, $., $patch_state, 
$line_type);
+       }
+       if ($files_in_patch > 1) {
+           &perror("WARN: patch `$i' contains patches for more than one file, 
namely $files_in_patch");
+       } elsif ($files_in_patch == 0) {
+           &perror("WARN: patch `$i' contains no patch");
+       }
+       return 1;
 }
 
 sub readmakefile {
@@ -621,7 +664,7 @@
                                                $level--;
                                        }
                                        if ($level eq 0) {
-                                               break;
+                                               last;
                                        }
                                }
                                if ($level > 0) {
@@ -631,7 +674,7 @@
                        }
                        else {
                                print("OK: defining $1\n") if $verbose;
-                               $definesfound{$1} = true;
+                               $definesfound{$1} = 1;
                        }
                }
                # try to get any included file
@@ -650,7 +693,7 @@
                        } else {
                                $dirname = dirname($file);
                                 if (-e "$dirname/$includefile") {
-                                    print("OK: including 
$dirname/$includefile\n");
+                                    print("OK: including 
$dirname/$includefile\n") unless $quiet;
                                     $contents .= 
readmakefile("$dirname/$includefile");
                                 }
                                 else {
@@ -1620,7 +1663,6 @@
        local($sub) = "";
        local($contents);
        local(@dirlist);
-       local(%alldirs);
        local($i);
 
        $contents = readmakefile("$portdir/$file") or
>Release-Note:
>Audit-Trail:
>Unformatted:



Home | Main Index | Thread Index | Old Index