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

[SCM] Debian package checker branch, master, updated. 2.5.11-196-gf399c98



The following commit has been merged in the master branch:
commit f399c98ee24cfc18afd72e38af032fb10b977a8b
Author: Niels Thykier <niels@thykier.net>
Date:   Fri Mar 29 13:14:12 2013 +0100

    L::Util: Introduce "{,l,r}strip" ...
    
    ... to replace uses of s/^\s++//; or/and s/\s++$//;.  In void context
    they modify their input inplace and in other contexts they copy the
    input.  Thus they can replace the "chomp" like:
    
      while ( my $line = <>) {     while (<>) {
         strip ($line);               strip;
         # do something ...           # do something...
      }                            }
    
    For cases where the original input might be useful, they can also
    return a copy:
    
      while ( my $orig = <>) {
         my $stripped = strip ($orig);
      }
    
    Signed-off-by: Niels Thykier <niels@thykier.net>

diff --git a/checks/binaries b/checks/binaries
index e2a2bc4..717eec6 100644
--- a/checks/binaries
+++ b/checks/binaries
@@ -28,7 +28,7 @@ use Lintian::Data;
 use Lintian::Relation qw(:constants);
 use Lintian::Tags qw(tag);
 use Lintian::Output qw(debug_msg);
-use Lintian::Util qw(fail slurp_entire_file);
+use Lintian::Util qw(fail slurp_entire_file strip);
 
 use File::Spec;
 
@@ -45,8 +45,7 @@ sub _embedded_libs {
         $regex = $opts;
         $opts = '';
     } else {
-        $opts=~ s/^\s++//o;
-        $opts=~ s/^\s++//o;
+        strip ($opts);
         foreach my $optstr (split m/\s++/, $opts) {
             my ($opt, $val) = split m/=/, $optstr, 2;
             if ($opt eq 'source' or $opt eq 'libname') {
diff --git a/checks/debhelper b/checks/debhelper
index 18451f2..9cd47da 100644
--- a/checks/debhelper
+++ b/checks/debhelper
@@ -25,7 +25,7 @@ use warnings;
 use Lintian::Data;
 use Lintian::Relation;
 use Lintian::Tags qw(tag);
-use Lintian::Util qw(fail slurp_entire_file);
+use Lintian::Util qw(fail slurp_entire_file strip);
 
 # If compat is less than or equal to this, then a missing version
 # for this level is only a pedantic issue.
@@ -523,16 +523,13 @@ sub _shebang_cmd {
     if (read $fd, $magic, 2) {
         if ($magic eq '#!') {
             $cmd = <$fd>;
-            chomp $cmd;
 
             # It is beyond me why anyone would place a lincity data
             # file here...  but if they do, we will handle it
             # correctly.
             $cmd = '' if $cmd =~ m/^#!/o;
 
-            # Strip whitespace if any
-            $cmd =~ s/^\s++//o;
-            $cmd =~ s/\s++$//o;
+            strip ($cmd);
         }
     }
     close $fd;
diff --git a/checks/filename-length b/checks/filename-length
index 28581e3..3d58574 100644
--- a/checks/filename-length
+++ b/checks/filename-length
@@ -23,6 +23,7 @@ use strict;
 use warnings;
 
 use Lintian::Tags qw(tag);
+use Lintian::Util qw(strip);
 
 use constant FILENAME_LENGTH_LIMIT => 80;
 
@@ -72,7 +73,7 @@ $len = 0;
 foreach my $entry (split m/\n/o, $info->field ('files', '')){
     my $filename;
     my $flen;
-    $entry =~ s/^\s++//o;
+    strip ($entry);
     next unless $entry;
     (undef, undef, $filename) = split m/\s++/o, $entry;
     next unless $filename;
diff --git a/checks/rules b/checks/rules
index 4aad759..91192aa 100644
--- a/checks/rules
+++ b/checks/rules
@@ -19,7 +19,7 @@ use warnings;
 
 use Lintian::Data;
 use Lintian::Tags qw(tag);
-use Lintian::Util qw(fail);
+use Lintian::Util qw(fail rstrip);
 
 our $PYTHON_DEPEND = 'python | python-dev | python-all | python-all-dev';
 our $PYTHON3_DEPEND = 'python3 | python3-dev | python3-all | python3-all-dev';
@@ -247,8 +247,7 @@ while (<RULES>) {
                     # we think we know what it will expand to - note
                     # we ought to "delay" it was a "=" variable rather
                     # than ":=" or "+=".
-                    $val =~ s/\s++$//o;
-                    for (split m/\s++/o, $val) {
+                    for (split m/\s++/o, rstrip ($val)) {
                         $seen{$_}++ if $required{$_};
                         $seen{$_}++ if $recommended{$_};
                     }
@@ -288,9 +287,8 @@ while (<RULES>) {
                         # we think we know what it will expand to - note
                         # we ought to "delay" it was a "=" variable rather
                         # than ":=" or "+=".
-                        $val =~ s/\s++$//o;
                         local $_;
-                        for (split m/\s++/o, $val) {
+                        for (split m/\s++/o, rstrip ($val)) {
                             $seen{$_}++ if $required{$_};
                             $seen{$_}++ if $recommended{$_};
                         }
diff --git a/collection/java-info b/collection/java-info
index 14b78d9..cfe4d3a 100755
--- a/collection/java-info
+++ b/collection/java-info
@@ -30,7 +30,7 @@ use FileHandle;
 use lib "$ENV{'LINTIAN_ROOT'}/lib/";
 use Lintian::Collect;
 use Lintian::Command qw(spawn reap);
-use Lintian::Util qw(fail);
+use Lintian::Util qw(fail rstrip);
 
 sub collect {
 my ($pkg, $type, $dir) = @_;
@@ -61,7 +61,7 @@ my $open_java_info = sub {
 my $errorhandler = sub {
     my ($err) = @_;
     $err =~ s/\r?\n/ /g;
-    $err =~ s/\s++$//;
+    rstrip ($err);
     print {$opts{pipe_in}} "-- ERROR: $err\n";
 };
 
diff --git a/frontend/lintian b/frontend/lintian
index 401237d..debfda8 100755
--- a/frontend/lintian
+++ b/frontend/lintian
@@ -418,8 +418,7 @@ sub cfg_display_level {
         }
 
         return if @display_level;
-        $val =~ s/^\s++//;
-        $val =~ s/\s++$//;
+        strip ($val);
         foreach my $dl (split m/\s++/, $val) {
             record_display_level('display-level', $dl);
         }
@@ -666,7 +665,7 @@ require Lintian::Tags;
 import Lintian::Tags qw(tag);
 require Lintian::Unpacker;
 require Lintian::Util;
-import Lintian::Util qw(fail parse_boolean);
+import Lintian::Util qw(fail parse_boolean strip);
 
 if (defined $experimental_output_opts) {
     my %opts = map { split(/=/) } split( /,/, $experimental_output_opts );
diff --git a/lib/Lintian/Data.pm b/lib/Lintian/Data.pm
index 7000ccc..d2179d7 100644
--- a/lib/Lintian/Data.pm
+++ b/lib/Lintian/Data.pm
@@ -22,6 +22,8 @@ use warnings;
 
 use Carp qw(croak);
 
+use Lintian::Util qw(strip);
+
 sub new {
     my ($class, @args) = @_;
     my $type = $args[0];
@@ -133,8 +135,7 @@ sub _parse_file {
     $filename = $vendors->[$vno] . '/' . $type if $vno < scalar @$vendors;
     local ($_, $.);
     while (<$fd>) {
-        chomp;
-        s/^\s++//;
+        strip;
         next if /^\#/ or $_ eq '';
         if (s/^\@//) {
             my ($op, $value) = split m/\s++/;
diff --git a/lib/Lintian/Lab/Entry.pm b/lib/Lintian/Lab/Entry.pm
index 11a1151..e0a4143 100644
--- a/lib/Lintian/Lab/Entry.pm
+++ b/lib/Lintian/Lab/Entry.pm
@@ -68,7 +68,7 @@ use File::Spec;
 use Scalar::Util qw(refaddr);
 
 use Lintian::Lab;
-use Lintian::Util qw(delete_dir read_dpkg_control get_dsc_info);
+use Lintian::Util qw(delete_dir read_dpkg_control get_dsc_info strip);
 
 # This is the entry format version - this changes whenever the layout of
 # entries changes.  This differs from LAB_FORMAT in that LAB_FORMAT
@@ -307,7 +307,7 @@ sub create {
         #    collection for the symlinking.
         my (undef, $dir, undef) = File::Spec->splitpath($pkg_path);
         for my $fs (split(m/\n/o, $self->info->field ('files'))) {
-            $fs =~ s/^\s*//o;
+            strip ($fs);
             next if $fs eq '';
             my @t = split(/\s+/o,$fs);
             next if ($t[2] =~ m,/,o);
@@ -456,11 +456,7 @@ sub _init {
 
     $coll = $head->{'collections'}//'';
     $coll =~ s/\n/ /go;
-    # Strip leading and trailing space to avoid "interesting" issues
-    # with the "first" collection having leading spaces.
-    $coll =~ s/^\s++//go;
-    $coll =~ s/\s++$//go;
-    foreach my $c (split m/\s*,\s*+/o, $coll) {
+    foreach my $c (split m/\s*,\s*+/o, strip ($coll)) {
         my ($cname, $cver) = split m/\s*=\s*/, $c;
         $self->_mark_coll_finished ($cname, $cver);
     }
diff --git a/lib/Lintian/Processable.pm b/lib/Lintian/Processable.pm
index 0909e92..99e6ae7 100644
--- a/lib/Lintian/Processable.pm
+++ b/lib/Lintian/Processable.pm
@@ -26,6 +26,8 @@ use warnings;
 
 use Carp qw(croak);
 
+use Lintian::Util qw(strip);
+
 =head1 NAME
 
 Lintian::Processable -- An (abstract) object that Lintian can process
@@ -124,7 +126,7 @@ sub new_from_metadata {
             $dir .= '/' if defined $dir;
             $dir //= '';
             foreach my $f (split m/\n/, $fn) {
-                $f =~ s/^\s++//o;
+                strip ($f);
                 next unless $f && $f =~ m/\.dsc$/;
                 my (undef, undef, $file) = split m/\s++/, $f;
                 # $dir should end with a slash if it is non-empty.
diff --git a/lib/Lintian/ProcessableGroup.pm b/lib/Lintian/ProcessableGroup.pm
index 14a74e6..6d42d5d 100644
--- a/lib/Lintian/ProcessableGroup.pm
+++ b/lib/Lintian/ProcessableGroup.pm
@@ -24,7 +24,7 @@ use warnings;
 
 use Lintian::Collect::Group;
 use Lintian::Processable;
-use Lintian::Util qw(fail get_dsc_info);
+use Lintian::Util qw(fail get_dsc_info strip);
 
 =head1 NAME
 
@@ -103,8 +103,7 @@ sub _init_group_from_changes {
     foreach my $line (split (/\n/o, $cinfo->{'files'}//'')) {
         my ($file);
         next unless defined $line;
-        chomp($line);
-        $line =~ s/^\s++//o;
+        strip ($line);
         next if $line eq '';
         # Ignore files that may lead to path traversal issues.
 
diff --git a/lib/Lintian/Profile.pm b/lib/Lintian/Profile.pm
index e55c7f9..14a3ea9 100644
--- a/lib/Lintian/Profile.pm
+++ b/lib/Lintian/Profile.pm
@@ -30,7 +30,7 @@ use Dpkg::Vendor qw(get_current_vendor get_vendor_info);
 
 use Lintian::CheckScript;
 use Lintian::Tags;
-use Lintian::Util qw(parse_boolean read_dpkg_control);
+use Lintian::Util qw(parse_boolean read_dpkg_control strip);
 
 =head1 NAME
 
@@ -490,10 +490,7 @@ sub _parse_boolean {
 sub _split_comma_sep_field {
     my ($self, $data) = @_;
     return () unless defined $data;
-    # remove trailing and leading white-space
-    $data =~ s/^\s++//o;
-    $data =~ s/\s++$//o;
-    return split m/\s*,\s*/o, $data;
+    return split m/\s*,\s*/o, strip ($data);
 }
 
 # $self->_check_for_invalid_fields($para, $known, $pname, $paraname)
diff --git a/lib/Lintian/Util.pm b/lib/Lintian/Util.pm
index 5b57f14..9efde3f 100644
--- a/lib/Lintian/Util.pm
+++ b/lib/Lintian/Util.pm
@@ -58,6 +58,9 @@ BEGIN {
                  slurp_entire_file
                  file_is_encoded_in_non_utf8
                  fail
+                 strip
+                 lstrip
+                 rstrip
                  system_env
                  delete_dir
                  copy_dir
@@ -501,7 +504,7 @@ sub visit_dpkg_paragraph {
             # Policy: Horizontal whitespace (spaces and tabs) may occur
             # immediately before or after the value and is ignored there.
             my ($tag,$value) = (lc $1,$2);
-            $value =~ s/\s+$//;
+            rstrip ($value);
             if (exists $section->{$tag}) {
                 # Policy: A paragraph must not contain more than one instance
                 # of a particular field name.
@@ -519,8 +522,7 @@ sub visit_dpkg_paragraph {
             # each continuation line must start with a space or a tab.  Any
             # trailing spaces or tabs at the end of individual lines of a
             # field value are ignored.
-            my $value = $1;
-            $value =~ s/\s+$//;
+            my $value = rstrip ($1);
             $section->{$last_tag} .= "\n" . $value;
         }
         # None of the above => syntax error
@@ -979,6 +981,76 @@ sub fail {
     croak $str;
 }
 
+=item strip ([LINE])
+
+Strips whitespace from the beginning and the end of LINE and returns
+it.  If LINE is omitted, C<$_> will be used instead. Example
+
+ @lines = map { strip } <$fd>;
+
+In void context, the input argument will be modified so it can be
+used as a replacement for chomp in some cases:
+
+  while ( my $line = <$fd> ) {
+    strip ($line);
+    # $line no longer has any leading or trailing whitespace
+  }
+
+Otherwise, a copy of the string is returned:
+
+  while ( my $orig = <$fd> ) {
+    my $stripped = strip ($orig);
+    if ($stripped ne $orig) {
+        # $orig had leadning or/and trailing whitespace
+    }
+  }
+
+=item lstrip ([LINE])
+
+Like L<strip|/strip ([LINE])> but only strip leading whitespace.
+
+=item rstrip ([LINE])
+
+Like L<strip|/strip ([LINE])> but only strip trailing whitespace.
+
+=cut
+
+# prototype for default to $_
+sub strip (_) {
+    if (defined wantarray) {
+        # perl 5.14 s///r would have been useful here.
+        my ($arg) = @_;
+        $arg =~ s/^\s++|\s++$//g;
+        return $arg;
+    } else {
+        $_[0] =~ s/^\s++|\s++$//g;
+    }
+}
+
+# prototype for default to $_
+sub lstrip (_) {
+    if (defined wantarray) {
+        # perl 5.14 s///r would have been useful here.
+        my ($arg) = @_;
+        $arg =~ s/^\s++//;
+        return $arg;
+    } else {
+        $_[0] =~ s/^\s++//;
+    }
+}
+
+# prototype for default to $_
+sub rstrip (_) {
+    if (defined wantarray) {
+        # perl 5.14 s///r would have been useful here.
+        my ($arg) = @_;
+        $arg =~ s/\s++$//g;
+        return $arg;
+    } else {
+        $_[0] =~ s/\s++$//;
+    }
+}
+
 =item check_path (CMD)
 
 Returns 1 if CMD can be found in PATH (i.e. $ENV{PATH}) and is
diff --git a/private/generate-profiles.pl b/private/generate-profiles.pl
index 50caa98..df7ef18 100755
--- a/private/generate-profiles.pl
+++ b/private/generate-profiles.pl
@@ -23,7 +23,7 @@ BEGIN {
 }
 
 use lib "$ENV{LINTIAN_ROOT}/lib";
-use Lintian::Util qw(fail read_dpkg_control);
+use Lintian::Util qw(fail read_dpkg_control strip);
 
 my $root = $ENV{LINTIAN_ROOT};
 my @dirs = ('profiles/debian');
@@ -125,10 +125,8 @@ sub read_tags {
     my @tags = ();
     open my $fd, '<', $file or die "$file: $!";
     while (<$fd>) {
-        chomp;
-        s/^\s++//;
+        strip;
         next if /^#/ or $_ eq '';
-        s/\s++$//;
         push @tags, $_;
     }
     close $fd;
diff --git a/reporting/harness b/reporting/harness
index 9aab497..d9c229b 100755
--- a/reporting/harness
+++ b/reporting/harness
@@ -115,7 +115,7 @@ require Lintian::Processable;
 require Lintian::Relation::Version;
 import Lintian::Relation::Version qw(versions_lt);
 require Lintian::Util;
-import Lintian::Util qw(visit_dpkg_paragraph);
+import Lintian::Util qw(strip visit_dpkg_paragraph);
 
 # turn file buffering off
 $| = 1;
@@ -490,9 +490,7 @@ sub Die {
 sub _trim_split {
     my ($val) = @_;
     return () unless $val;
-    $val =~ s/^\s++//o;
-    $val =~ s/\s++$//o;
-    return split m/\s*+,\s*+/o, $val;
+    return split m/\s*+,\s*+/o, strip ($val);
 }
 
 # local_mirror_manifests ($mirdir, $dists, $areas, $archs)
@@ -612,7 +610,7 @@ sub _parse_srcs_pg {
     return unless $active_srcs->{$s};
     $dir .= '/' if $dir;
     foreach my $f (split m/\n/, $data->{'files'}) {
-        $f =~ s/^\s++//o;
+        strip ($f);
         next unless $f && $f =~ m/\.dsc$/;
         my (undef, undef, $file) = split m/\s++/, $f;
         # $dir should end with a slash if it is non-empty.

-- 
Debian package checker


Reply to: