#!/usr/bin/perl
$|++;
my
$VERSION
=
'0.15'
;
my
(
%options
);
init_options();
my
@list
= get_list();
for
my
$id
(
@list
) {
print
"Deleting ... $id\n"
;
$options
{CPANSTATS}->do_query(
"DELETE from cpanstats WHERE id=$id"
);
$options
{LITESTATS}->do_query(
"DELETE from cpanstats WHERE id=$id"
);
}
if
(
$options
{all}) {
$options
{CPANSTATS}->do_query(
"DELETE from cpanstats WHERE id>$options{all}"
);
$options
{LITESTATS}->do_query(
"DELETE from cpanstats WHERE id>$options{all}"
);
}
if
(
$options
{
delete
}) {
$options
{CPANSTATS}->do_query(
"DELETE from cpanstats WHERE id=$options{delete}"
);
$options
{LITESTATS}->do_query(
"DELETE from cpanstats WHERE id=$options{delete}"
);
}
sub
get_list {
my
@list
;
my
$file
=
$options
{file} ||
return
();
die
"file [$file] not found"
unless
(-f
$file
);
my
$fh
= IO::File->new(
$file
) or
die
"Cannot open file [$file]: $!"
;
while
(<
$fh
>) {
chomp
;
my
(
$num
) = (m/^(\d+)/);
push
@list
,
$num
if
(
$num
);
}
$fh
->
close
;
return
@list
;
}
sub
init_options {
GetOptions( \
%options
,
'config|c=s'
,
'all|a=i'
,
'delete|d=i'
,
'file=s'
,
'help|h'
,
'version|v'
);
help(1)
if
(
$options
{help});
help(0)
if
(
$options
{version});
help(1,
"Must specify the configuration file"
)
unless
(
$options
{config});
help(1,
"Configuration file [$options{config}] not found"
)
unless
(-f
$options
{config});
my
$cfg
= Config::IniFiles->new(
-file
=>
$options
{config} );
for
my
$db
(
qw(CPANSTATS LITESTATS)
) {
die
"No configuration for $db database\n"
unless
(
$cfg
->SectionExists(
$db
));
my
%opts
=
map
{
$_
=>
$cfg
->val(
$db
,
$_
);}
qw(driver database dbfile dbhost dbport dbuser dbpass)
;
$options
{
$db
} = CPAN::Testers::Common::DBUtils->new(
%opts
);
die
"Cannot configure $db database\n"
unless
(
$options
{
$db
});
}
}
sub
help {
my
(
$full
,
$mess
) =
@_
;
print
"\n$mess\n\n"
if
(
$mess
);
if
(
$full
) {
print
<<HERE;
Usage: $0 --config=<file> \\
( [--all=<num>] [--delete=<num>] [--file=<file>] | -h | -v )
--config=<file> configuration file
--all=<num> delete all entried greater than given id
--delete=<num> delete given id
--file=<file> delete multiple ids (1 per line)
-h this help screen
-v program version
HERE
}
print
"$0 v$VERSION\n"
;
exit
(0);
}