Lintian checking ARB packages
Niels Thykier
niels at thykier.net
Mon Dec 31 13:58:33 UTC 2012
On 2012-12-31 14:19, Bhavani Shankar R wrote:
> On Thu, Dec 27, 2012 at 4:05 PM, Niels Thykier <niels at thykier.net> wrote:
>> [...]
>
>> * test_has_maintainer_scripts
>> - checks/debhelper might be useful as an example.
>
> Yes checks/debhelper has the required functionality I believe when I
> checked for maintainer scripts. and Indeed it has some dh_ checks.
> Thanks Niels!
>
>> * test_is_lightweight_app
>> - checks/cruft might be useful as an example (e.g. File::Find
>> and $info->unpacked)
>
> Looked at $info->unpacked, but as ARB, I think we define lightweight
> app in terms of code if m not wrong, (If you have a look at the
> snippet below:
>
> @requires('source_files')
> def test_is_lightweight_app(self):
> source_file_extensions = [ ".py", ".rb", ".vala", ".c", ".h", ".cpp",
> ".cc", ".hh", ".pm", ".java", ".js", ".pl" ]
> number_of_max_source_files = 30
> number_of_max_lines_of_code = 15000
> source_code_files = filter(lambda a: os.path.splitext(a)[1] in
> source_file_extensions,
> self.source_files)
> loc = sum(map(lambda a: len(open(a).readlines()), source_code_files))
> if len(source_code_files) >= number_of_max_source_files or \
> loc >= number_of_max_lines_of_code:
>
> indicates the same)
>
> Wanted your inputs on whether this type of check is feasible in lintian.
>
I believe it is feasible to do. In its basics it would look something like:
use Lintian::Util qw(fail);
[...]
my $no_files = 0;
my $no_lines = 0;
foreach my $filename ($info->sorted_index) {
next unless $info->index ($filename)->is_file;
next unless $filename =~ m/\.(?:py|rb|vala|...)$/;
my $fpath = $info->unpacked ($filename);
$no_files++;
last if $no_files > 30;
open my $fd, '<', $fpath or fail "open $fpath: $!";
foreach my $line (<$fd>) {
$no_files++;
}
close $fd;
last if $no_lines > 15000;
}
if ($no_files > 30) {
tag 'too-many-files', $no_files, '> 30';
}
if ($no_lines > 30) {
tag 'too-many-lines-of-source', $no_lines, '> 15 000';
}
Of course, it is probably possible to replace some of the loop with
stuff like grep and map (though I am not sure it makes it more readable
or concise for that matter).
>> [...]
>
>
> Thanks Niels for your everlasting patience and reviews :)
>
> Regards,
You are more than welcome. On a related note, I have devised a short
POD tutorial in commit 0b7b5d86a502c27ce61c5b1157d43fa7de4b8b19. It
will show up in the API docs (run "debian/rules api-doc").
I am not sure it teaches you anything atm, but feel free to send
suggestions or patches for it. :)
~Niels
More information about the App-review-board
mailing list