Bug#762609: lintian: new checks: deprecated D-Bus policies
On 2014-09-30 15:21, Simon McVittie wrote:
> Thanks for reviewing; I hope I've fixed all your concerns.
>
Hi,
Thanks for amending your patch. Unfortunately, I have a couple of new
minor remarks. Furthermore, I have updated our internal API in some
cases that will be useful in this check as well, which I would like to
promote as well. :)
Though this time I have finished updating all Lintian checks, so now
they all serve as an example of how to use the new API (correctly).
> [...]
> +use Lintian::Util qw(slurp_entire_file);
Combined with a new feature, this import can be made redundant with a
proposed change later. See below.
> +
> +sub run {
> + my ($pkg, $type, $info) = @_;
> +
> + foreach my $file ($info->sorted_index) {
> + next if $file->is_dir;
> +
> + if ($file =~ m{^etc/dbus-1/(?:system|session)\.d/}) {
New feature: This (plus the outer loop) can now be replaced by
something like:
my @files;
for my $dirname qw(etc/dbus-1/session.d/ etc/dbus-1/system.d/) {
if (my $dir = $info->index_resolved_path($dirname)) {
push(@files, $dir->children);
}
}
for my $file (@files) {
next unless $file->is_open_ok;
_check_policy(...);
}
Which "only" iterates the two directories rather than the entire index
list. This is a fairly minor issue.
> + my $path = $info->index_resolved_path($file);
The call to index_resolved_path is redundant here; $file serves the same
purpose. There is only a "minor" difference with symlinks being
resolved - otherwise it is an expensive identity call[1]. But:
* $file->is_open_ok etc. are smart enough to resolve the symlink first.
* Based on your usage, the difference is redundant.
* If you really wanted the resolved path, then use $file->resolve_path
- NB: Can return undef for unsafe symlinks.
- It is cheaper for non-symlinks (than index_resolved_path).
NOTE: In git master, I have made $info->index_resolve_path($obj) error
out (where $obj is some sort of reference or e.g. a Lintian::Path object).
> + next unless $file->is_open_ok;
> + _check_policy($file, $path);
> + }
> + }
> +
> + return;
> +}
> +
> +sub _check_policy {
> + my ($file, $path) = @_;
> +
> + my $xml = slurp_entire_file($path->open);
New feature (making the import redundant as well):
my $xml = $file->file_contents;
NB: $path is redundant (see my argument above).
> +
> + [...]
Thanks for considering,
~Niels
[1] Admittedly, FSVO "expensive".
Reply to: