Add upgrade path.
NewsStats.pm: Add $PackageVersion. install.pl: Modularise program flow to subroutines. Add framework for database upgrade and upgrade instructions. Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
parent
2832c235b2
commit
f6d15ca78e
|
@ -18,6 +18,7 @@ require Exporter;
|
||||||
@EXPORT = qw(
|
@EXPORT = qw(
|
||||||
$MySelf
|
$MySelf
|
||||||
$MyVersion
|
$MyVersion
|
||||||
|
$PackageVersion
|
||||||
ReadOptions
|
ReadOptions
|
||||||
ReadConfig
|
ReadConfig
|
||||||
OverrideConfig
|
OverrideConfig
|
||||||
|
@ -40,6 +41,7 @@ require Exporter;
|
||||||
Output => [qw(OutputData FormatOutput)],
|
Output => [qw(OutputData FormatOutput)],
|
||||||
SQLHelper => [qw(SQLHierarchies SQLGroupList GetMaxLenght)]);
|
SQLHelper => [qw(SQLHierarchies SQLGroupList GetMaxLenght)]);
|
||||||
$VERSION = '0.1';
|
$VERSION = '0.1';
|
||||||
|
our $PackageVersion = '0.1';
|
||||||
|
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
@ -82,7 +84,7 @@ sub ReadOptions {
|
||||||
sub ShowVersion {
|
sub ShowVersion {
|
||||||
################################################################################
|
################################################################################
|
||||||
### display version and exit
|
### display version and exit
|
||||||
print "$MyVersion\nCopyright (c) 2010 Thomas Hochstein <thh\@inter.net>\n";
|
print "NewsStats v$PackageVersion\n$MyVersion\nCopyright (c) 2010 Thomas Hochstein <thh\@inter.net>\n";
|
||||||
print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n";
|
print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n";
|
||||||
exit(100);
|
exit(100);
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,10 +28,11 @@ use DBI;
|
||||||
################################# Main program #################################
|
################################# Main program #################################
|
||||||
|
|
||||||
### read commandline options
|
### read commandline options
|
||||||
my %Options = &ReadOptions('');
|
my %Options = &ReadOptions('u:');
|
||||||
|
|
||||||
### change working directory to .. (as we're in .../install)
|
### change working directory to .. (as we're in .../install)
|
||||||
chdir dirname($0).'/..';
|
chdir dirname($0).'/..';
|
||||||
|
my $Path = cwd();
|
||||||
|
|
||||||
### read configuration
|
### read configuration
|
||||||
print("Reading configuration.\n");
|
print("Reading configuration.\n");
|
||||||
|
@ -82,35 +83,12 @@ CREATE TABLE IF NOT EXISTS `$Conf{'DBTableGrps'}` (
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postings per newsgroup';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postings per newsgroup';
|
||||||
GRPS
|
GRPS
|
||||||
|
|
||||||
##### --------------------------- End of definitions ---------------------------
|
##### --------------------------------------------------------------------------
|
||||||
|
##### Installation / upgrade instructions
|
||||||
|
##### --------------------------------------------------------------------------
|
||||||
|
|
||||||
### create database tables
|
my $Install = <<INSTALL;
|
||||||
print "-----\nStarting database table generation.\n";
|
----------
|
||||||
# DB init
|
|
||||||
my $DBHandle = InitDB(\%Conf,1);
|
|
||||||
|
|
||||||
# read tables
|
|
||||||
my %TablesInDB = %{$DBHandle->table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')};
|
|
||||||
|
|
||||||
# check for tables and create them, if they don't exist yet
|
|
||||||
foreach my $Table (keys %DBCreate) {
|
|
||||||
if (defined($TablesInDB{$Conf{$Table}})) {
|
|
||||||
printf("Database table %s.%s already exists, skipping ....\n",$Conf{'DBDatabase'},$Conf{$Table});
|
|
||||||
next;
|
|
||||||
};
|
|
||||||
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});
|
|
||||||
};
|
|
||||||
|
|
||||||
# close handle
|
|
||||||
$DBHandle->disconnect;
|
|
||||||
print "Database table generation done.\n";
|
|
||||||
|
|
||||||
### output information on other necessary steps
|
|
||||||
my $Path = cwd();
|
|
||||||
print <<TODO;
|
|
||||||
-----
|
|
||||||
Things left to do:
|
Things left to do:
|
||||||
|
|
||||||
1) Setup an INN feed to feedlog.pl
|
1) Setup an INN feed to feedlog.pl
|
||||||
|
@ -149,7 +127,102 @@ Things left to do:
|
||||||
Enjoy!
|
Enjoy!
|
||||||
|
|
||||||
-thh <thh\@inter.net>
|
-thh <thh\@inter.net>
|
||||||
TODO
|
INSTALL
|
||||||
|
|
||||||
|
my $Upgrade = <<UPGRADE;
|
||||||
|
----------
|
||||||
|
Your installation was upgraded from $Options{'u'} to $PackageVersion.
|
||||||
|
|
||||||
|
Don't forget to restart your INN feed so that it can pick up the new version:
|
||||||
|
|
||||||
|
# ctlinnd begin 'newsstats!'
|
||||||
|
|
||||||
|
(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')};
|
||||||
|
|
||||||
|
if (!$Options{'u'}) {
|
||||||
|
##### installation mode
|
||||||
|
print "----------\nStarting database table generation.\n";
|
||||||
|
# check for tables and create them, if they don't exist yet
|
||||||
|
foreach my $Table (keys %DBCreate) {
|
||||||
|
&CreateTable($Table);
|
||||||
|
};
|
||||||
|
print "Database table generation done.\n";
|
||||||
|
|
||||||
|
# Display install instructions
|
||||||
|
print $Install;
|
||||||
|
} 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Display upgrade instructions
|
||||||
|
print $Upgrade;
|
||||||
|
};
|
||||||
|
|
||||||
|
# close handle
|
||||||
|
$DBHandle->disconnect;
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
################################# Subroutines ##################################
|
||||||
|
|
||||||
|
sub CreateTable() {
|
||||||
|
my $Table = shift;
|
||||||
|
if (defined($TablesInDB{$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});
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
sub DoMySQL() {
|
||||||
|
my $SQL = shift;
|
||||||
|
my $DBQuery = $DBHandle->prepare($SQL);
|
||||||
|
$DBQuery->execute() or warn sprintf("$MySelf: E: Database error: %s\n",$DBI::errstr);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue