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

[SCM] Debian package checker branch, master, updated. 2.5.13-41-g5ac5f5d



The following commit has been merged in the master branch:
commit 8d6618df0e512b7d508879d2d8cf1362a1c3c77a
Author: Niels Thykier <niels@thykier.net>
Date:   Sun Jun 23 12:52:51 2013 +0200

    L::Path: Overload some operators
    
    Signed-off-by: Niels Thykier <niels@thykier.net>

diff --git a/debian/changelog b/debian/changelog
index 0cf5481..93fc542 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -47,6 +47,8 @@ lintian (2.5.14) UNRELEASED; urgency=low
       checks without the extension (with a deprecation warning).
   * lib/Lintian/{Path,Util}.pm:
     + [NT] Remove deprecated methods.
+  * lib/Lintian/Path.pm:
+    + [NT] Overload some operators.
 
   * reporting/config:
     + [NT] Replace /org with /srv.
diff --git a/lib/Lintian/Path.pm b/lib/Lintian/Path.pm
index d5f837d..56cac0a 100644
--- a/lib/Lintian/Path.pm
+++ b/lib/Lintian/Path.pm
@@ -20,8 +20,18 @@ package Lintian::Path;
 
 use strict;
 use warnings;
-
 use parent qw(Class::Accessor);
+use overload (
+    '""' => \&_as_string,
+    'qr' => \&_as_regex_ref,
+    'bool' => \&_bool,
+    '!' => \&_bool_not,
+    '.'  => \&_str_concat,
+    'cmp' => \&_str_cmp,
+    'eq' => \&_str_eq,
+    'ne' => \&_str_ne,
+    'fallback' => 0,
+);
 
 use Carp qw(croak);
 
@@ -262,6 +272,54 @@ sub link_normalized {
     return $target;
 }
 
+### OVERLOADED OVERATORS ###
+
+# overload apparently does not like the mk_ro_accessor, so use a level
+# of indirection
+
+sub _as_regex_ref {
+    my ($self) = @_;
+    my $name = $self->name;
+    return qr{ \Q $name \E }xsm;
+}
+
+sub _as_string {
+    my ($self) = @_;
+    return $self->name;
+}
+
+sub _bool {
+    # Always true (used in "if ($info->index('some/path')) {...}")
+    return 1;
+}
+
+sub _bool_not {
+    my ($self) = @_;
+    return !$self->_bool;
+}
+
+sub _str_cmp {
+    my ($self, $str, $swap) = @_;
+    return $str cmp $self->name if $swap;
+    return $self->name cmp $str;
+}
+
+sub _str_concat {
+    my ($self, $str, $swap) = @_;
+    return $str . $self->name if $swap;
+    return $self->name . $str;
+}
+
+sub _str_eq {
+    my ($self, $str) = @_;
+    return $self->name eq $str;
+}
+
+sub _str_ne {
+    my ($self, $str) = @_;
+    return $self->name ne $str;
+}
+
 =back
 
 =head1 AUTHOR

-- 
Debian package checker


Reply to: