#
# It is part of the NewsStats package.
#
-# Copyright (c) 2010 Thomas Hochstein <thh@inter.net>
+# Copyright (c) 2010-2012 Thomas Hochstein <thh@inter.net>
#
# It can be redistributed and/or modified under the same terms under
# which Perl itself is published.
use Cwd;
use DBI;
+use Getopt::Long qw(GetOptions);
+Getopt::Long::config ('bundling');
################################# Main program #################################
### read commandline options
-my %Options = &ReadOptions('u:');
+my ($OptUpdate);
+GetOptions ('u|update=s' => \$OptUpdate,
+ 'h|help' => \&ShowPOD,
+ 'V|version' => \&ShowVersion) or exit 1;
### change working directory to .. (as we're in .../install)
chdir dirname($0).'/..';
### read configuration
print("Reading configuration.\n");
-my %Conf = %{ReadConfig('newsstats.conf')};
+my %Conf = %{ReadConfig($HomePath.'/newsstats.conf')};
##### --------------------------------------------------------------------------
##### Database table definitions
a) Edit your 'newsfeeds' file and insert something like
## gather statistics for NewsStats
- newsstats!\
- :!*,de.*\
+ newsstats!\\
+ :!*,de.*\\
:Tc,WmtfbsPNH,Ac:$Path/feedlog.pl
Please
my $Upgrade = <<UPGRADE;
----------
-Your installation was upgraded from $Options{'u'} to $PackageVersion.
+Your installation was upgraded from $OptUpdate to $PackageVersion.
Don't forget to restart your INN feed so that it can pick up the new version:
(or whatever you called your feed).
UPGRADE
-##### --------------------------------------------------------------------------
-##### Upgrading
-##### --------------------------------------------------------------------------
-my (%DBUpgrade,%Instructions);
-
-# 0.01 -> 0.02
-$DBUpgrade{'0.02'} = <<DB0point02;
-SELECT 1;
-DB0point02
-$Instructions{'0.02'} = <<IN0point02;
-Dummy Instructions.
-IN0point02
-
##### --------------------------- End of definitions ---------------------------
### DB init, read list of tables
print "Reading database information.\n";
my $DBHandle = InitDB(\%Conf,1);
-my %TablesInDB = %{$DBHandle->table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')};
+my %TablesInDB =
+ %{$DBHandle->table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')};
-if (!$Options{'u'}) {
+if (!$OptUpdate) {
##### installation mode
print "----------\nStarting database table generation.\n";
# check for tables and create them, if they don't exist yet
} else {
##### upgrade mode
print "----------\nStarting upgrade process.\n";
- if ($Options{'u'} < $PackageVersion) {
- # Database upgrades for each version
- foreach my $UpVersion (sort keys %DBUpgrade) {
- if ($UpVersion > $Options{'u'} and $UpVersion <= $PackageVersion) {
- print "v$UpVersion: Executing database upgrade ...\n";
- &DoMySQL($DBUpgrade{$UpVersion});
- };
- };
- # Display upgrade instructions for each version
- foreach my $UpVersion (sort keys %Instructions) {
- if ($UpVersion > $Options{'u'} and $UpVersion <= $PackageVersion) {
- print "v$UpVersion: Upgrade Instructions >>>>>\n";
- my $Padding = ' ' x (length($UpVersion) + 3);
- $Instructions{$UpVersion} =~ s/^/$Padding/;
- print $Instructions{$UpVersion};
- print "<" x (length($UpVersion) + 29) . "\n";
- };
+ $PackageVersion = '0.03';
+ if ($OptUpdate < $PackageVersion) {
+ if ($OptUpdate < 0.02) {
+ # 0.01 -> 0.02
+ # &DoMySQL('...;');
+ # print "v0.02: Database upgrades ...\n";
+ # &PrintInstructions('0.02',<<" INSTRUCTIONS");
+ # INSTRUCTIONS
};
};
- # Display upgrade instructions
+ # Display general upgrade instructions
print $Upgrade;
};
################################# Subroutines ##################################
-sub CreateTable() {
+sub CreateTable {
my $Table = shift;
if (defined($TablesInDB{$Conf{$Table}})) {
- printf("Database table %s.%s already exists, skipping ....\n",$Conf{'DBDatabase'},$Conf{$Table});
+ printf("Database table %s.%s already exists, skipping ....\n",
+ $Conf{'DBDatabase'},$Conf{$Table});
return;
};
my $DBQuery = $DBHandle->prepare($DBCreate{$Table});
- $DBQuery->execute() or die sprintf("$MySelf: E: Can't create table %s in database %s: %s%\n",$Table,$Conf{'DBDatabase'},$DBI::errstr);
- printf("Database table %s.%s created succesfully.\n",$Conf{'DBDatabase'},$Conf{$Table});
+ $DBQuery->execute() or
+ &Bleat(2, sprintf("Can't create table %s in database %s: %s%\n",$Table,
+ $Conf{'DBDatabase'},$DBI::errstr));
+ printf("Database table %s.%s created succesfully.\n",
+ $Conf{'DBDatabase'},$Conf{$Table});
return;
};
-sub DoMySQL() {
+sub DoMySQL {
my $SQL = shift;
my $DBQuery = $DBHandle->prepare($SQL);
- $DBQuery->execute() or warn sprintf("$MySelf: E: Database error: %s\n",$DBI::errstr);
+ $DBQuery->execute() or &Bleat(1, sprintf("Database error: %s\n",$DBI::errstr));
return;
};
+sub PrintInstructions {
+ my ($UpVersion,$Instructions) = @_;
+ print "v$UpVersion: Upgrade Instructions >>>>>\n";
+ my $Padding = ' ' x (length($UpVersion) + 3);
+ $Instructions =~ s/^ /$Padding/mg;
+ print $Instructions;
+ print "<" x (length($UpVersion) + 29) . "\n";
+};
+
__END__
=head1 SYNOPSIS
-B<install> [B<-Vh>]
+B<install> [B<-Vh> [--update I<version>]
=head1 REQUIREMENTS
-See doc/README: Perl 5.8.x itself and the following modules from CPAN:
-
-=over 2
-
-=item -
-
-Config::Auto
-
-=item -
-
-DBI
-
-=back
+See L<doc/README>.
=head1 DESCRIPTION
=head2 Configuration
-F<install.pl> will read its configuration from F<newsstats.conf> via
+B<install> will read its configuration from F<newsstats.conf> via
Config::Auto.
-See doc/INSTALL for an overview of possible configuration options.
+See L<doc/INSTALL> for an overview of possible configuration options.
=head1 OPTIONS
=over 3
-=item B<-V> (version)
+=item B<-V>, B<--version>
-Print out version and copyright information on B<yapfaq> and exit.
+Print out version and copyright information and exit.
-=item B<-h> (help)
+=item B<-h>, B<--help>
Print this man page and exit.
+=item B<-u>, B<--update> I<version>
+
+Don't do a fresh install, but update from I<version>.
+
=back
=head1 FILES
=item F<newsstats.conf>
-Runtime configuration file for B<yapfaq>.
+Runtime configuration file.
=back
=item -
-doc/README
+L<doc/README>
=item -
-doc/INSTALL
+L<doc/INSTALL>
=back
=head1 COPYRIGHT AND LICENSE
-Copyright (c) 2010 Thomas Hochstein <thh@inter.net>
+Copyright (c) 2010-2012 Thomas Hochstein <thh@inter.net>
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.