Gentoo::VDB - Simple API for querying Gentoo's installed-package database
use Gentoo::VDB; my $vdb = Gentoo::VDB->new(); my (@categories) = $vdb->categories; ## Note: next line is slow my (@packages) = $vdb->packages; ## Much faster my (@packages) = $vdb->packages({ in => 'dev-perl' });
new
my $instance = Gentoo::VDB->new(\%ARGS);
categories
Returns a list of single-token category names that are valid.
my (@categories) = $vdb->categories;
Note: Categories that have no definite installed packages are omitted, even if their dirs are present.
This is mostly because this is the only way to disambiguate between a temporary directory and a category.
It is mostly equivalent to
find /var/db/pkg \ -maxdepth 1 \ -mindepth 1 \ -not -empty \ -printf '%f\n'
And should be similarly performant.
packages
Returns a list of valid packages in CAT/PN-VERSION form.
CAT/PN-VERSION
my ( @packages ) = $vdb->packages(); # Show only packages in dev-perl, much faster my ( @packages ) = $vdb->packages({ in => 'dev-perl' });
This is mostly equivalent to:
find /var/db/pkg \ -maxdepth 2 \ -mindepth 2 \ -not -empty \ -printf '%p\n' | \ sed -r 's|^.*/([^/]+)/([^/]+)$|\1/\2|' or find /var/db/pkg/dev-perl \ -maxdepth 1 \ -mindepth 1 \ -not -empty \ -printf '%p\n' | \ sed -r 's|^.*/([^/]+)/([^/]+)$|\1/\2|'
properties
Returns a list of hash entries describing properties of the given CAT/PN-VERSION
my ( @properties ) = $vdb->properties({ for => 'dev-lang/perl-5.22.1-r1' });
A property contains:
{ property => .... # the name of the property ( backend specific ) label => .... # usually the same as 'property' but is defined by # Gentoo::VDB, some special cases like # 'special:source_ebuild' and 'unknown:' . $property # exist. type => .... # Gentoo::VDB specific hint for decoding the # data. for => .... # CAT/PN-V entry # Selectively ... content => # For "generic" types like "file", this is generally # a MIME type for the undelying decoded data. # ie: No VDB Specific decoding hint, just amorphous # blob of bytes that have to be handled thusly # eg: text/plain, application/octet-stream encoding => # if the data has some sort of protocol encoding, # for instance, a bzip encoded text source # this will be populated respectively, eg: # application/x-bzip2 }
A given record may overlap with another record in part, eg: One "property" may yield 2 different hashes with different labels and types.
But this is just an idea at this stage, and there's no implementation behind it.
Mostly pertinent for large objects like `environment.bz2` that can yield additional metadata.
get_property
Fetch a given property as a string blob
my $prop = $vdb->get_property({ for => 'dev-lang/perl-5.22.1-r1', property => 'BackendName' });
Kent Fredric <kentnl@cpan.org>
This software is copyright (c) 2016 by Kent Fredric.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Gentoo::VDB, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Gentoo::VDB
CPAN shell
perl -MCPAN -e shell install Gentoo::VDB
For more information on module installation, please visit the detailed CPAN module installation guide.