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

Re: [lintian] 01/01: Modify Lintian::Data's "all" to always return keys in insertion order, dropping dependency on libtie-ixhash-perl.



Why? 

This package is since old stable and under news they are waiting libtie-hash-index-perl-waiting for full speed

Moreover it will slow down lintian::data for general case...

Bastien

Le 28 août 2017 18:58:02 GMT+02:00, Chris Lamb <chris@chris-lamb.co.uk> a écrit :
>This is an automated email from the git hooks/post-receive script.
>
>lamby pushed a commit to branch master
>in repository lintian.
>
>commit 0ffea0eb355973d1be2fd788dd8e4aadeac81222
>Author: Chris Lamb <lamby@debian.org>
>Date:   Mon Aug 28 16:09:24 2017 +0100
>
>Modify Lintian::Data's "all" to always return keys in insertion order,
>dropping dependency on libtie-ixhash-perl.
>---
> checks/fields.pm    |  3 +--
> debian/changelog    |  3 +++
> debian/control      |  2 --
>lib/Lintian/Data.pm | 50
>+++++++++++++++++---------------------------------
> 4 files changed, 21 insertions(+), 37 deletions(-)
>
>diff --git a/checks/fields.pm b/checks/fields.pm
>index a9d145f..f625abc 100644
>--- a/checks/fields.pm
>+++ b/checks/fields.pm
>@@ -101,8 +101,7 @@ my $NAME_SECTION_MAPPINGS = Lintian::Data->new(
>     qr/\s*=>\s*/,
>     sub {
>         return {'regex' =>  qr/$_[0]/x, 'section' => $_[1]};
>-    },
>-    Lintian::Data->get_orderedtype());
>+    });
> 
> my %VCS_EXTRACT = (
>     browser => sub { return @_;},
>diff --git a/debian/changelog b/debian/changelog
>index 7f23d43..c7a4759 100644
>--- a/debian/changelog
>+++ b/debian/changelog
>@@ -117,6 +117,9 @@ lintian (2.5.53) UNRELEASED; urgency=medium
>   * lib/Lintian/Check.pm:
>   + [CL] Stop emitting {maintainer,uploader}-address-causes-mail-loops
>       for @packages.debian.org addresses.  (Closes: #871575)
>+  * lib/Lintian/Data.pm:
>+    + [CL] Modify Lintian::Data's "all" to always return keys in
>insertion
>+      order, dropping dependency on libtie-ixhash-perl.
> 
>   * helpers/coll/objdump-info-helper:
>     + [CL] Apply patch from Steve Langasek to accomodate binutils 2.29
>diff --git a/debian/control b/debian/control
>index e2ee71e..31f5672 100644
>--- a/debian/control
>+++ b/debian/control
>@@ -52,7 +52,6 @@ Build-Depends: aspell,
>                libtest-synopsis-perl,
>                libtext-levenshtein-perl,
>                libtext-template-perl,
>-               libtie-ixhash-perl,
>                libtimedate-perl,
>                liburi-perl,
>                libyaml-libyaml-perl,
>@@ -98,7 +97,6 @@ Depends: binutils,
>          liblist-moreutils-perl,
>          libparse-debianchangelog-perl,
>          libtext-levenshtein-perl,
>-         libtie-ixhash-perl,
>          libtimedate-perl,
>          liburi-perl,
>          libyaml-libyaml-perl,
>diff --git a/lib/Lintian/Data.pm b/lib/Lintian/Data.pm
>index 3275a78..a683172 100644
>--- a/lib/Lintian/Data.pm
>+++ b/lib/Lintian/Data.pm
>@@ -27,8 +27,6 @@ use POSIX qw(ENOENT);
> 
> use Lintian::Util qw(strip);
> 
>-use Tie::IxHash;
>-
> our $LAZY_LOAD = 1;
> 
> sub _checked_open {
>@@ -62,11 +60,6 @@ sub new {
>     return $self;
> }
> 
>-sub get_orderedtype {
>-    tie my %myhash, 'Tie::IxHash';
>-    return \%myhash;
>-}
>-
> # _get_data fetches an already loaded dataset by type.  It is
> # mostly useful for determining whether it makes sense to make
> # sense to be "lazy".
>@@ -87,15 +80,14 @@ sub get_orderedtype {
>     sub _load_data {
>         my ($self, $data_spec) = @_;
>         my $data_name = $data_spec->[0];
>-        my $data_type = $data_spec->[3] // {};
>         unless (exists($data{$data_name})) {
>             my $vendors = $self->_get_vendor_names;
>-            my $dataset = $data_type;
>+            my ($dataset, $keyorder) = ({}, []);
>      my ($fd, $vno) = $self->_open_data_file($data_name, $vendors, 0);
>-            $self->_parse_file($data_name, $fd, $dataset, $data_spec,
>-                $vendors, $vno);
>+            $self->_parse_file($data_name, $fd, $dataset, $keyorder,
>+                $data_spec, $vendors, $vno);
>             close($fd);
>-            $data{$data_name} = $dataset;
>+            $data{$data_name} = {dataset => $dataset, keyorder =>
>$keyorder};
>         }
>         return $self->{'data'} = $data{$data_name};
>     }
>@@ -157,7 +149,8 @@ sub get_orderedtype {
> }
> 
> sub _parse_file {
>-    my ($self, $data_name, $fd, $dataset, $data_spec, $vendors, $vno)=
>@_;
>+    my ($self, $data_name, $fd, $dataset, $keyorder, $data_spec,
>$vendors,$vno)
>+      = @_;
>     my (undef, $separator, $code) = @{$data_spec};
>     my $filename = $data_name;
>$filename = $vendors->[$vno] . '/' . $data_name if $vno < scalar
>@$vendors;
>@@ -170,12 +163,13 @@ sub _parse_file {
>             if ($op eq 'delete') {
>             croak "Missing key after \@delete in $filename at line $."
>                   unless defined $value && length $value;
>+                @{$keyorder} = grep { $_ ne $value } @{$keyorder};
>                 delete $dataset->{$value};
>             } elsif ($op eq 'include-parent') {
>                 my ($pfd, $pvo)
>                = $self->_open_data_file($data_name, $vendors,$vno +1);
>-                $self->_parse_file($data_name, $pfd, $dataset,
>$data_spec,
>-                    $vendors, $pvo);
>+                $self->_parse_file($data_name, $pfd, $dataset,
>$keyorder,
>+                    $data_spec, $vendors, $pvo);
>                 close($pfd);
>         } elsif ($op eq 'if-vendor-is' or $op eq 'if-vendor-is-not') {
>          my ($desired_name, $remain) = split(m{ \s++ }xsm, $value, 2);
>@@ -212,6 +206,7 @@ sub _parse_file {
>         } else {
>             ($key, $val) = ($line => 1);
>         }
>+        push @{$keyorder}, $key unless exists $dataset->{$key};
>         $dataset->{$key} = $val;
>     }
>     return;
>@@ -232,21 +227,21 @@ sub known {
>         return;
>     }
>     my $data = $self->{data} || $self->_force_promise;
>-    return (exists $data->{$keyword}) ? 1 : undef;
>+    return (exists $data->{'dataset'}{$keyword}) ? 1 : undef;
> }
> 
> # Return all known keywords (in no particular order).
> sub all {
>     my ($self) = @_;
>     my $data = $self->{data} || $self->_force_promise;
>-    return keys(%{$data});
>+    return @{$data->{'keyorder'}};
> }
> 
> # Query a data object for the value attached to a particular keyword.
> sub value {
>     my ($self, $keyword) = @_;
>     my $data = $self->{data} || $self->_force_promise;
>-    return (exists $data->{$keyword}) ? $data->{$keyword} : undef;
>+    return $data->{'dataset'}{$keyword} // undef;
> }
> 
> 1;
>@@ -266,9 +261,7 @@ Lintian::Data - Lintian interface to query lists of
>keywords
>     if ($hash->value($keyword) > 1) {
>         # do something ...
>     }
>-    my $ordered = Lintian::Data->new('ordered-type',
>-       qr{\s++}, undef,Lintian::Data->get_orderedtype());
>-    if ($ordered->value($keyword) > 1) {
>+    if ($list->value($keyword) > 1) {
>         # do something ...
>     }
>     my @keywords = $list->all;
>@@ -317,7 +310,7 @@ is a hashref, new keys can be inserted etc.
> 
> =over 4
> 
>-=item new(TYPE [,SEPARATOR[, [CODE, STORAGE]]])
>+=item new(TYPE [,SEPARATOR[, CODE]])
> 
>Creates a new Lintian::Data object for the given TYPE.  TYPE is a
>partial
>path relative to the F<data> directory and should correspond to a file
>in
>@@ -331,10 +324,6 @@ the lines into key/value pairs.
> If CODE is also given, it is assumed to be a sub that will pre-process
>the key/value pairs.  See the L</Interface for the CODE argument>
>above.
> 
>-If STORAGE is also given (by default {}), it will be used to store
>value/key.
>-STORAGE should tie to a hash and could be used to populate value or
>-to be used to use insertion ordered hash.
>-
>A given file will only be loaded once.  If new() is called again with
>the
>same TYPE argument, the data previously loaded will be reused, avoiding
> multiple file reads.
>@@ -344,10 +333,6 @@ multiple file reads.
> Specifies vendor profile.  It must be set before the first data file
> is loaded.
> 
>-=item get_orderedtype()
>-
>-Get a empty ordered hash implementation
>-
> =back
> 
> =head1 INSTANCE METHODS
>@@ -356,9 +341,8 @@ Get a empty ordered hash implementation
> 
> =item all()
> 
>-Returns all keywords listed in the data file as a list (in no
>particular
>-order; the original order is not preserved).  In a scalar context,
>returns
>-the number of keywords.
>+Returns all keywords listed in the data file as a list in original
>order.
>+In a scalar context, returns the number of keywords.
> 
> =item known(KEYWORD)
> 

-- 
Envoyé de mon appareil Android avec K-9 Mail. Veuillez excuser ma brièveté.


Reply to: