Mineplex/.FILES USED TO GET TO WHERE WE ARE PRESENTLY/xampp/perl/bin/cpandb

268 lines
6.6 KiB
Plaintext
Raw Normal View History

2023-05-17 21:44:01 +00:00
#!perl -w
# $Id: cpandb 84 2020-05-31 06:29:34Z stro $
use strict;
use warnings;
use CPAN::SQLite;
use Getopt::Long;
our $VERSION = 0.219;
my ($CPAN, $setup, $help, $reindex, $index, $query,
$db_name, $db_dir, $module, $dist, $cpanid, $update);
my $rc = GetOptions('CPAN=s' => \$CPAN,
'db_name=s' => \$db_name,
'db_dir=s' => \$db_dir,
'setup' => \$setup,
'update' => \$update,
'help' => \$help,
'module=s' => \$module,
'dist=s' => \$dist,
'cpanid=s' => \$cpanid,
'reindex=s' => \$reindex);
$query = ($module or $dist or $cpanid);
$index = ($update or $reindex or $setup);
if ($help or not $rc or not ($index or $query)) {
print <<"END";
Setup, maintain, and search the CPAN::SQLite database
Usage:
$^X $0 --setup
$^X $0 --update
$^X $0 --reindex dist_name
$^X $0 --module Mod::Name
$^X $0 --dist Distname
$^X $0 --cpanid CPANID
$^X $0 --help
END
exit(1);
}
if (defined $setup and defined $reindex) {
die "Must reindex on an existing database";
}
if ($index) {
my $obj = CPAN::SQLite->new(CPAN => $CPAN,
setup => $setup,
db_name => $db_name,
db_dir => $db_dir,
reindex => $reindex,
);
$obj->index();
}
else {
my $max_results = $ENV{'CPAN_SQLITE_MAX_RESULTS'};
my $obj = CPAN::SQLite->new(CPAN => $CPAN,
db_name => $db_name,
db_dir => $db_dir,
max_results => $max_results);
my $results;
RESULTS : {
$module and do {
$obj->query(mode => 'module', name => $module);
$results = $obj->{results};
if (not $results) {
print qq{\nNo module by name of "$module" was found.\n};
print qq{Error: $obj->{error}\n} if $obj->{error};
}
else {
my $abs = $results->{mod_abs} || '';
print << "EOI";
Module: $results->{mod_name}
Abstract: $abs
Version: $results->{mod_vers}
Distribution: $results->{dist_name}
CPAN author: $results->{cpanid}
CPAN file: $results->{dist_file}
Download: $results->{download}
EOI
}
last RESULTS;
};
$dist and do {
$obj->query(mode => 'dist', name => $dist);
$results = $obj->{results};
if (not $results) {
print qq{\nNo distribution by name of "$dist" was found.\n};
print qq{Error: $obj->{error}\n} if $obj->{error};
}
else {
my $abs = $results->{dist_abs} || '';
print << "EOI";
Distribution: $results->{dist_name}
Abstract: $abs
Version: $results->{dist_vers}
CPAN author: $results->{cpanid}
CPAN file: $results->{dist_file}
Download: $results->{download}
EOI
}
my $mods = $results->{mods};
if ($mods and (ref($mods) eq 'ARRAY')) {
print qq{\nProvided modules:\n};
foreach my $item(@$mods) {
my $abs = $item->{mod_abs} || '';
print qq{ $item->{mod_name}: $abs\n};
}
}
last RESULTS;
};
$cpanid and do {
$obj->query(mode => 'author', name => $cpanid);
$results = $obj->{results};
if (not $results) {
print qq{\nNo cpanid by name of "$cpanid" was found.\n};
print qq{Error: $obj->{error}\n} if $obj->{error};
}
else {
print << "EOI";
CPANID: $results->{cpanid}
Full Name: $results->{fullname}
email: $results->{email}
EOI
}
my $dists = $results->{dists};
if ($dists and (ref($dists) eq 'ARRAY')) {
print qq{\nAvailable distributions:\n};
foreach my $item(@$dists) {
my $abs = $item->{dist_abs} || '';
print qq{ $item->{dist_file}: $abs\n};
}
}
last RESULTS;
};
}
}
__END__
=head1 NAME
cpandb - interface to C<CPAN::SQLite>
=head1 VERSION
version 0.219
=head1 DESCRIPTION
This script is an interface to the routines of
L<CPAN::SQLite> for setting up, maintaining and
searching a C<DBD::SQLite> database
of CPAN. Available options can be grouped into
three categories.
=head2 Common options
These are options which are common to both setting up
and maintaining the database or performing queries on it.
These are
=over 3
=item * C<--CPAN '/path/to/CPAN'>
This specifies the path to where the index files are
to be stored. This could be a local CPAN mirror,
defined here by the presence of a F<MIRRORED.BY> file beneath
this directory, or a local directory in which to store
these files from a remote CPAN mirror. In the latter case,
the index files are fetched from a remote CPAN mirror,
using the same list that C<CPAN.pm> uses, if this is
configured, and are updated if they are more than one
day old.
If the C<CPAN> option is not given, it will default
to C<cpan_home> of L<CPAN::>, if this is configured,
with the sources being found under C<keep_source_where>.
A fatal error results if such a directory isn't found.
Updates to these index files are assumed here to be
handled by C<CPAN.pm>.
=item * C<--db_name 'cpan-sqlite'>
This is the name of the database that C<DBD::SQLite>
will use. If not given, this defaults to C<cpandb-sqlite>.
=item * C<--db_dir '/path/to/db/dir'>
This specifies the path to where the database file is
found. If not given, it defaults to the
C<cpan_home> directory of C<CPAN.pm>, if present, or to
the directory in which the script was invoked.
=back
=head2 Indexing options
These are options which are used for setting up and
maintaining the database. These include
=over 3
=item * C<--setup>
This specifies that the database is to be created and
populated from the CPAN indices; any existing database
will be overwritten.
=item * C<--update>
This is used to update an existing database,
which must have first been created with the C<setup>
option.
=item * C<--reindex 'dist_name'>
This specifies that the CPAN distribution C<dist_name>
is to be reindexed.
=back
=head2 Querying options
These options are used to query the database. Available
options are
=over 3
=item * C<--module Mod::Name>
This provides information on the specified module name.
=item * C<--dist Dist-Name>
This provides information on the specified distribution name.
=item * C<--cpanid CPANID>
This provides information on the specified CPAN author id
=back
All search terms are assumed to be exact matches in a
case-insensitive manner.
There's no limit on maximum number of records. If you need to adjust the number
because you get too many results, set the CPAN_SQLITE_MAX_RESULTS environment
variable.
=head1 SEE ALSO
L<CPAN::SQLite>.
=cut