The following commit has been merged in the master branch: commit 5b36419d5040f8af89bf92440974c658d3fe69c0 Author: Niels Thykier <ni...@thykier.net> Date: Wed Dec 22 09:59:42 2010 +0100
Create a sorted file index for checks to use instead of sorting it themselves (Closes: #605844) * checks/*: + [NT] Use the new pre-sorted file index when iterating over files. * lib/Lintian/Collect/Binary.pm: + [NT] Create a sorted file index to avoid sorting it in the checks. (Closes: #605844) diff --git a/checks/changelog-file b/checks/changelog-file index 8147095..40f4b0f 100644 --- a/checks/changelog-file +++ b/checks/changelog-file @@ -79,7 +79,7 @@ for my $file (sort keys %{$info->file_info}) { } # Read package contents.... Capitalization errors are dealt with later. -foreach (sort keys %{$info->index}) { +foreach (@{$info->sorted_index}) { next unless length $_; # skip packages which have a /usr/share/doc/$pkg -> foo symlink if (m,usr/share/doc/$ppkg$, and defined $info->index->{$_}->{link}) { diff --git a/checks/copyright-file b/checks/copyright-file index 336d0f4..267ed43 100644 --- a/checks/copyright-file +++ b/checks/copyright-file @@ -45,7 +45,7 @@ my $found = 0; my $linked = 0; # Read package contents... -foreach (sort keys %{$info->index}) { +foreach (@{$info->sorted_index}) { my $index_info = $info->index->{$_}; if (m,usr/(share/)?doc/$ppkg/copyright(\.\S+)?$,) { my $ext = $2; diff --git a/checks/etcfiles b/checks/etcfiles index bc61715..9a734b1 100644 --- a/checks/etcfiles +++ b/checks/etcfiles @@ -45,7 +45,7 @@ if (open(IN, '<', $conffiles)) { } # Read package contents... -foreach my $file (sort keys %{$info->index}) { +foreach my $file (@{$info->sorted_index}) { my $index_info = $info->index->{$file}; next unless $file =~ m,^etc, and $index_info->{type}=~ m/^[-h]/; diff --git a/checks/fields b/checks/fields index e503a52..af5fae5 100644 --- a/checks/fields +++ b/checks/fields @@ -503,7 +503,7 @@ if (defined $info->field('installer-menu-item')) { my $metapackage = 0; if ($type eq 'binary') { $metapackage = 1; - for my $file (keys %{$info->index}) { + for my $file (@{$info->sorted_index}) { next if $info->index->{$file}->{type} =~ /^d/; next if $file =~ m%^usr/share/doc/%; next if $file =~ m%^usr/share/lintian/overrides/%; diff --git a/checks/files b/checks/files index bdbd585..07b7fea 100644 --- a/checks/files +++ b/checks/files @@ -199,7 +199,7 @@ if ($description) { } } if ($is_empty) { - for my $file (sort keys %{$info->index}) { + for my $file (@{$info->sorted_index}) { # Ignore directories unless ($file =~ m,/$,) { # Skip if $file is an empty string @@ -226,7 +226,7 @@ if ($is_empty) { } # Read package contents... -foreach my $file (sort keys %{$info->index}) { +foreach my $file (@{$info->sorted_index}) { next if $file eq ""; my $index_info = $info->index->{$file}; my $owner = $index_info->{owner} . '/' . $index_info->{group}; @@ -1204,7 +1204,7 @@ if ($pkg_section !~ m,games$, and $games > 0 and $other == 0) { # so just ignore them. # # python-support needs a directory for each package even it might be empty -foreach my $dir (sort keys %{$info->index}) { +foreach my $dir (@{$info->sorted_index}) { next if $dir eq "" or $info->index->{$dir}->{type} ne 'd'; next if ($dir =~ m{^var/} or $dir =~ m{^etc/}); next if $pkg eq 'base-files'; diff --git a/checks/infofiles b/checks/infofiles index 2c5b994..872a74b 100644 --- a/checks/infofiles +++ b/checks/infofiles @@ -40,7 +40,7 @@ my %missing_section; my $has_info_file; # Read package contents... -foreach my $file (sort keys %{$info->index}) { +foreach my $file (@{$info->sorted_index}) { my $index_info = $info->index->{$file}; my $file_info = $info->file_info->{$file}; my $link = $index_info->{link} || ''; diff --git a/checks/manpages b/checks/manpages index 0035bda..17912d2 100644 --- a/checks/manpages +++ b/checks/manpages @@ -40,7 +40,7 @@ my %link; my %manpage; # Read package contents... -foreach my $file (sort keys %{$info->index}) { +foreach my $file (@{$info->sorted_index}) { my $index_info = $info->index->{$file}; my $file_info = $info->file_info->{$file}; my $link = $index_info->{link} || ''; diff --git a/checks/menu-format b/checks/menu-format index bbb4bc8..4e85dae 100644 --- a/checks/menu-format +++ b/checks/menu-format @@ -396,7 +396,7 @@ closedir MENUDIR; # Find the desktop files in the package for verification. my @desktop_files; -foreach my $file (sort keys %{$info->index}) { +foreach my $file (@{$info->sorted_index}) { my $index_info = $info->index->{$file}; my $operm = $index_info->{operm}; diff --git a/checks/scripts b/checks/scripts index 54aa37b..1acd2b0 100644 --- a/checks/scripts +++ b/checks/scripts @@ -312,7 +312,7 @@ my $pkg = shift; my $type = shift; my $info = shift; -foreach (sort keys %{$info->index}) { +foreach (@{$info->sorted_index}) { next if $_ eq ""; my $index_info = $info->index->{$_}; my $operm = $index_info->{operm}; @@ -1114,7 +1114,7 @@ for my $divert (keys %added_diversions) { if ($expand_diversions) { tag 'diversion-for-unknown-file', $divert, "$script:$line" - unless (grep { $_ =~ m/$divertrx/ } keys %{$info->index}); + unless (grep { $_ =~ m/$divertrx/ } @{$info->sorted_index}); } else { tag 'diversion-for-unknown-file', $divert, "$script:$line" unless (exists $info->index->{$divert}); diff --git a/checks/shared-libs b/checks/shared-libs index 1450f4b..b266ba5 100644 --- a/checks/shared-libs +++ b/checks/shared-libs @@ -83,7 +83,7 @@ foreach my $file (sort keys %{$info->file_info}) { # 2nd step: read package contents -for my $cur_file (sort keys %{$info->index}) { +for my $cur_file (@{$info->sorted_index}) { # shared library? my $cur_file_data = $info->index->{$cur_file}; diff --git a/debian/changelog b/debian/changelog index 4eec353..df45810 100755 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,8 @@ lintian (2.4.4) UNRELEASED; urgency=low - build-depends-on-specific-java-doc-package - depends-on-specific-java-doc-package + * checks/*: + + [NT] Use the new pre-sorted file index when iterating over files. * checks/binaries: + [RA] Exclude kfreebsd-kernel-di-{amd64,i386} from the embedded-zlib check since it's in the kernel. (Closes: #593397) @@ -53,6 +55,10 @@ lintian (2.4.4) UNRELEASED; urgency=low * debian/compat: + [NT] Bump debhelper comat to 7. + * lib/Lintian/Collect/Binary.pm: + + [NT] Create a sorted file index to avoid sorting it in the checks. + (Closes: #605844) + * t/tests/{rules-not-makefile,scripts-missing-dep}: + [NT] Added new tests. (Closes: #607731) diff --git a/lib/Lintian/Collect/Binary.pm b/lib/Lintian/Collect/Binary.pm index 6b6feeb..bc297fb 100644 --- a/lib/Lintian/Collect/Binary.pm +++ b/lib/Lintian/Collect/Binary.pm @@ -122,6 +122,18 @@ sub index { return $self->{index}; } +# Returns sorted file index (eqv to sort keys %{$info->index}), except it is cached. +sub sorted_index { + my ($self) = @_; + my $index; + my @result; + return $self->{sorted_index} if exists $self->{sorted_index}; + $index = $self->index(); + @result = sort keys %{$index}; + $self->{sorted_index} = \...@result; + return \...@result; +} + # Returns the information from collect/file-info sub file_info { my ($self) = @_; -- Debian package checker -- To UNSUBSCRIBE, email to debian-lint-maint-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1pvkab-0007xc...@alioth.debian.org