pkgsrc-Changes-HG archive

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

[pkgsrc/trunk]: pkgsrc/pkgtools/pkglint/files - Improved detection of valid s...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/27386327fc5d
branches:  trunk
changeset: 504156:27386327fc5d
user:      rillig <rillig%pkgsrc.org@localhost>
date:      Tue Dec 06 01:07:20 2005 +0000

description:
- Improved detection of valid shell words once more.
- Rewrote the code for loading the deprecated.map file. It is only
  loaded once now. The code that checks for use of deprecated variables
  can handle multiple variables in a single line now.

diffstat:

 pkgtools/pkglint/files/pkglint.pl |  82 ++++++++++++++++++++++++--------------
 1 files changed, 52 insertions(+), 30 deletions(-)

diffs (118 lines):

diff -r ef4257bb2529 -r 27386327fc5d pkgtools/pkglint/files/pkglint.pl
--- a/pkgtools/pkglint/files/pkglint.pl Mon Dec 05 23:55:01 2005 +0000
+++ b/pkgtools/pkglint/files/pkglint.pl Tue Dec 06 01:07:20 2005 +0000
@@ -11,7 +11,7 @@
 # Freely redistributable.  Absolutely no warranty.
 #
 # From Id: portlint.pl,v 1.64 1998/02/28 02:34:05 itojun Exp
-# $NetBSD: pkglint.pl,v 1.417 2005/12/05 23:50:16 rillig Exp $
+# $NetBSD: pkglint.pl,v 1.418 2005/12/06 01:07:20 rillig Exp $
 #
 # This version contains lots of changes necessary for NetBSD packages
 # done by:
@@ -765,7 +765,7 @@
        |       \"(?:\\.|[^\"\\])*\"
        |       \`[^\`]*\`
        |       \\.
-       |       \$\{[^}]+\}
+       |       \$\{[^\$}]+\}
        |       [^'\"\\\s;&\|<>\#]
        )+ | ;;? | &&? | \|\|? | <<? | >>? | \#.*)"sx;
 
@@ -942,6 +942,34 @@
        return ($get_make_vars_typemap_result = $vartypes);
 }
 
+my $get_deprecated_map_result = undef;
+sub get_deprecated_map() {
+       my ($fname, $lines, $vars);
+
+       if (defined($get_deprecated_map_result)) {
+               return $get_deprecated_map_result;
+       }
+
+       $fname = conf_datadir."/deprecated.map";
+       if (!($lines = load_file($fname))) {
+               log_fatal($fname, NO_LINE_NUMBER, "Cannot be read.");
+       }
+
+       $vars = {};
+       foreach my $line (@{$lines}) {
+               if ($line->text =~ qr"^#" || $line->text =~ qr"^\s*$") {
+                       # Ignore empty and comment lines.
+
+               } elsif ($line->text =~ qr"^(\S+)\s+(.*)$") {
+                       $vars->{$1} = $2;
+
+               } else {
+                       $line->log_fatal("Unknown line format.");
+               }
+       }
+       return ($get_deprecated_map_result = $vars);
+}
+
 my $load_dist_sites_url2name = undef;
 my $load_dist_sites_names = undef;
 sub load_dist_sites() {
@@ -2230,39 +2258,33 @@
 
 sub checklines_deprecated_variables($) {
        my ($lines) = @_;
-       my ($fname) = (conf_datadir."/deprecated.map");
-       my ($deprecated, $varnames, $varuse_regex, %vars);
-
-       if (!($deprecated = load_file($fname))) {
-               log_error($fname, NO_LINE_NUMBER, "Cannot be read.");
-               return;
-       }
-
-       %vars = ();
-       foreach my $line (@{$deprecated}) {
-               if ($line->text =~ qr"^#" || $line->text =~ qr"^\s*$") {
-                       next;
-
-               } elsif ($line->text =~ qr"^(\S+)\s+(.*)$") {
-                       $vars{$1} = $2;
-
-               } else {
-                       $line->log_fatal("Unknown line format.");
-               }
-       }
-       $varnames = join("|", sort(keys(%vars)));
-       $varuse_regex = qr"\$\{(${varnames})[:}]";
+       my ($vars, $varnames, $regex_varuse);
+
+       $vars = get_deprecated_map();
+       $varnames = join("|", sort(keys(%{$vars})));
+       $regex_varuse = qr"\$\{(${varnames})[:}]";
 
        foreach my $line (@{$lines}) {
+               my ($rest);
+
                if ($line->text =~ regex_varassign) {
-                       my ($varname, undef, $value) = ($1, $2, $3);
-                       if (exists($vars{$varname})) {
-                               $line->log_warning("${varname} is deprecated. $vars{$varname}");
+                       my ($varname) = ($1);
+                       $rest = $3;
+                       if (exists($vars->{$varname})) {
+                               $line->log_warning("Definition of ${varname} is deprecated. $vars->{$varname}");
                        }
 
-                       if ($value =~ $varuse_regex) {
-                               my ($varuse_name) = ($1);
-                               $line->log_warning("Use of ${varuse_name} is deprecated. $vars{$varuse_name}");
+               } elsif ($line->text =~ regex_shellcmd) {
+                       ($rest) = ($1);
+               }
+
+               if (defined($rest)) {
+                       while ($rest =~ s/$regex_varuse//) {
+                               my ($varname) = ($1);
+
+                               if (exists($vars->{$varname})) {
+                                       $line->log_warning("Use of ${varname} is deprecated. $vars->{$varname}");
+                               }
                        }
                }
        }



Home | Main Index | Thread Index | Old Index