OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Thomas Lotterer
Root: /v/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-registry Date: 03-Aug-2006 01:15:35
Branch: HEAD Handle: 2006080300153400
Modified files:
openpkg-registry registry-db.pl
Log:
introduce OSSP::cfg and option parsing, leverage common registry code;
work-off setup part using own dbdo() function with improved error
handling and debugging and smaller footprint on usage; move "version
already match" detection block to the beginning of update/upgrade
procedure; fix broken version UPDATE; add manual page
Summary:
Revision Changes Path
1.42 +339 -158 openpkg-registry/registry-db.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-registry/registry-db.pl
============================================================================
$ cvs diff -u -r1.41 -r1.42 registry-db.pl
--- openpkg-registry/registry-db.pl 2 Aug 2006 23:14:19 -0000 1.41
+++ openpkg-registry/registry-db.pl 2 Aug 2006 23:15:34 -0000 1.42
@@ -27,8 +27,10 @@
use strict;
use Data::Dumper;
+use OSSP::cfg;
use DBI;
use DBD::Pg;
+use Getopt::Long;
# program name, version and date
my $progname="registry-db.pl";
@@ -40,6 +42,15 @@
$Data::Dumper::Indent = 1;
$Data::Dumper::Terse = 1;
+# determine path to OpenPKG instance
+my $PREFIX='@l_prefix@';
+$PREFIX=$ENV{OPENPKG_PREFIX} if ($ENV{OPENPKG_PREFIX} ne "");
+
+# registry common code
+my $pm = "registry.pm";
+$pm = "$PREFIX/libexec/openpkg-registry/registry.pm" unless($PREFIX =~
m/[EMAIL PROTECTED]@$/);
+require $pm; import registry;
+
# derive data version from program version
my $datavers={};
$datavers->{value} = $progvers;
@@ -52,19 +63,83 @@
die "cannot derive datavers major.minor.patch triple from progvers=" .
$progvers;
}
-# determine path to OpenPKG instance
-my $PREFIX='@l_prefix@';
-$PREFIX=$ENV{OPENPKG_PREFIX} if ($ENV{OPENPKG_PREFIX} ne "");
+# options and defaults
+my $opt = {};
+$opt->{prefix} = $PREFIX;
+$opt->{config} = ®istry::getcfgfilename($PREFIX);
+$opt->{debug} = 0;
+$opt->{help} = 0;
+$opt->{version} = 0;
+
+sub debug () {
+ my ($txt) = @_;
+ printf STDERR "$progname:DEBUG: %s\n", $txt if($opt->{debug});
+}
+
+sub warning () {
+ my ($txt) = @_;
+ printf STDERR "$progname:WARNING: %s\n", $txt;
+}
+
+sub error () {
+ my ($txt) = @_;
+ printf STDERR "$progname:ERROR: %s\n", $txt;
+ exit(1);
+}
-# configuration
-my $cfg = {};
-$cfg->{db}->{registry}->{host}="127.0.0.1";
-$cfg->{db}->{registry}->{superuser}->{username}="postgresql";
-$cfg->{db}->{registry}->{superuser}->{password}="postgresql";
-$cfg->{db}->{registry}->{username}="registry";
-$cfg->{db}->{registry}->{password}="registry";
-$cfg->{db}->{registry}->{tablespace}="registry";
-$cfg->{db}->{session}->{dbfile}="$PREFIX/var/openpkg-registry/ui/session.db";
+sub version ()
+{
+ printf "$progname:INFO: version=%s date=%s\n", $progvers, $progdate;
+ exit(0);
+}
+
+sub usage ()
+{
+ my ($level) = @_;
+ my $txt = qq{
+ $progname:$level: Usage: $progname [options] command
+ Available options:
+ -p|prefix=s specifiy prefix for data ($opt->{prefix})
+ -C|config=s specifiy config file ($opt->{config})
+ -D|debug turn on debugging
+ -H|help print out this usage page
+ -V|version print version
+ Available commands:
+ setup setup/upgrade database
+ };
+ $txt =~ s/^\n//s; $txt =~ s/^[ ]{8}//mg; $txt =~ s/ *$//mg;
+ if ($level eq "INFO") {
+ print $txt;
+ exit(0);
+ }
+ print STDERR $txt;
+ exit(1);
+}
+
+Getopt::Long::Configure("bundling");
+my $result = GetOptions(
+ 'p|prefix=s' => \$opt->{prefix},
+ 'C|config=s' => \$opt->{config},
+ 'D|debug' => \$opt->{debug},
+ 'H|help' => \$opt->{help},
+ 'V|version' => \$opt->{version}
+) || &usage("ERROR");
+&version() if ($opt->{version});
+&usage("INFO") if ($opt->{help});
+( $#ARGV == 0 ) || &usage("ERROR");
+
+# check data prefix
+if ( $ARGV[0] eq "setup") {
+ &error("required data prefix empty") if ($opt->{prefix} eq "");
+ &error("required data prefix unset") if ($opt->{prefix} =~ m/[EMAIL
PROTECTED]@$/);
+}
+
+# handle configuration
+my $defcfgtxt = ®istry::getdefcfgtxt($opt->{prefix});
+my $defcfg = ®istry::parsecfgtxt($defcfgtxt);
+my $usecfgtxt = ®istry::readcfgtxtfile($opt->{config});
+my $usecfg = ®istry::parsecfgtxt($usecfgtxt);
+my $cfg = ®istry::mergecfg($defcfg, $usecfg);
# database handle and scratch variables
#
@@ -76,6 +151,11 @@
my $dbh; # database handle
my $dbv; # database version
+if ($ARGV[0] eq "setup") {
+ &setup();
+}
+exit(0);
+
sub dbopen($)
{
my ($db) = @_;
@@ -148,55 +228,85 @@
return $dbi;
}
-# create user, tablespace and database
-#
-$dbh = &dbopen("template1");
-die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
-
-$sql="CREATE USER registry ENCRYPTED PASSWORD 'registry' NOCREATEDB
NOCREATEUSER;";
-$rv = $dbh->do($sql);
-print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n" if($dbh->errstr !~
/(user|role) .* already exists/);
-
-$sql="CREATE TABLESPACE registry OWNER registry LOCATION
'$PREFIX/var/openpkg-registry/db';";
-$rv = $dbh->do($sql);
-print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n" if($dbh->errstr !~
/tablespace .* already exists/);
-
-$sql="CREATE DATABASE registry OWNER registry TABLESPACE registry;";
-$rv = $dbh->do($sql);
-print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n" if($dbh->errstr !~
/database .* already exists/);
-
-$dbh->disconnect(); undef $dbh;
-
-# enable Pg/SQL
-#
-$dbh = &dbopen("registry/superuser");
-die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
-
-$sql="";
-$sql.="CREATE FUNCTION plpgsql_call_handler () RETURNS LANGUAGE_HANDLER AS
'\$libdir/plpgsql' LANGUAGE C;\n";
-$sql.="COMMENT ON FUNCTION plpgsql_call_handler () IS 'PL/pgSQL Call
Handler';\n";
-$sql.="CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER
plpgsql_call_handler;\n";
-$rv = $dbh->do($sql);
-print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n" if($dbh->errstr !~
/function .* already exists/);
-
-$dbh->disconnect(); undef $dbh;
+sub dbdo ($$)
+{
+ my ($dbh, $sql, $ignore) = @_;
+ my ($rv, $txt, $msg, $ok, $expectederror);
-# registry
-#
-$dbh = &dbopen("registry");
-die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
-while(&upgraderegistry()) {};
-$dbh->disconnect(); undef $dbh;
+ $sql =~ s/ *\n+$//s;
+ $rv = $dbh->do($sql);
+ $ok = 0; $ok = 1 if ($rv eq '0E0' or $rv >= 1);
+ $msg = $dbh->errstr;
+ $msg =~ s/ *\n+$//s;
+ $expectederror = 0; $expectederror = 1 if ($msg =~ m/$ignore/);
+ $txt = sprintf "\n sql=\"%s\"\n ret=\"%s\"\n msg=\"%s\"\n",
$sql, $rv, $msg;
+ if (not $ok and not $expectederror) {
+ printf STDERR "$progname:ERROR: %s\n", $txt;
+ return 0;
+ }
+ &debug($txt);
+ return 1;
+}
-# session
-#
-$dbh = &dbopen("session");
-die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
-chmod oct("0664"), $cfg->{db}->{session}->{dbfile};
-while(&upgradesession()) {};
-$dbh->disconnect(); undef $dbh;
+sub setup ()
+{
+ # create user, tablespace and database
+ #
+ $dbh = &dbopen("template1");
+ die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
-exit(0);
+ $sql = sprintf "CREATE USER %s ENCRYPTED PASSWORD %s NOCREATEDB
NOCREATEUSER;",
+ $cfg->{db}->{registry}->{username},
+ $dbh->quote($cfg->{db}->{registry}->{password});
+ &dbdo($dbh, $sql,
+ '(user|role) .* already exists') || die;
+
+ $sql = sprintf "CREATE TABLESPACE %s OWNER %s LOCATION %s;",
+ $cfg->{db}->{registry}->{tablespace},
+ $cfg->{db}->{registry}->{username},
+ $dbh->quote($cfg->{db}->{registry}->{location});
+ &dbdo($dbh, $sql,
+ 'tablespace .* already exists') || die;
+
+ $sql = sprintf "CREATE DATABASE %s OWNER %s TABLESPACE %s;",
+ $cfg->{db}->{registry}->{database},
+ $cfg->{db}->{registry}->{username},
+ $cfg->{db}->{registry}->{tablespace};
+ &dbdo($dbh, $sql,
+ 'database .* already exists') || die;
+
+ $dbh->disconnect(); undef $dbh;
+
+ # enable Pg/SQL
+ #
+ $dbh = &dbopen("registry/superuser");
+ die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
+
+ $sql = q{
+ CREATE FUNCTION plpgsql_call_handler () RETURNS LANGUAGE_HANDLER AS
'$libdir/plpgsql' LANGUAGE C;
+ COMMENT ON FUNCTION plpgsql_call_handler () IS 'PL/pgSQL Call
Handler';
+ CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER
plpgsql_call_handler;
+ };
+ &dbdo($dbh, $sql,
+ 'function .* already exists') || die;
+
+ $dbh->disconnect(); undef $dbh;
+
+ # registry
+ #
+ $dbh = &dbopen("registry");
+ die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
+ while (&upgraderegistry()) {};
+ $dbh->disconnect(); undef $dbh;
+
+ # session
+ #
+ $dbh = &dbopen("session");
+ die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
+ chmod oct("0664"), $cfg->{db}->{session}->{dbfile};
+ while (&upgradesession()) {};
+ $dbh->disconnect(); undef $dbh;
+}
sub upgradesession()
{
@@ -220,81 +330,73 @@
die "cannot derive database major.minor.patch triple from
value=".$dbv->{version}->{value};
}
- # database has no version and needs initialization from scratch
+ # program data version and database version already match
+ #
+ if ( $dbv->{version}->{major} == $datavers->{major}
+ and $dbv->{version}->{minor} == $datavers->{minor}
+ and $dbv->{version}->{patch} == $datavers->{patch}) {
+ &debug("database=" . $dbv->{version}->{major} . "."
+ . $dbv->{version}->{minor} . "."
+ . $dbv->{version}->{patch}
+ . " is at exactly program datavers="
+ . $datavers->{major} . "."
+ . $datavers->{minor} . "."
+ . $datavers->{patch});
+ return 0;
+ }
+
+ # 0.0.0 upgrade to 0.0.1 - initialization from scratch
#
- if ( $dbv->{version}->{major} == 0
+ elsif ( $dbv->{version}->{major} == 0
and $dbv->{version}->{minor} == 0
and $dbv->{version}->{patch} == 0) {
- print "initializing database\n";
- # SQLite transactions seem to factor out CREATE TABLEs
- $sql = &schemasession1();
- $rv = $dbh->do($sql);
- print "[schema.1]\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
(not defined $rv);
- $sql = &schemasession2();
- $rv = $dbh->do($sql);
- print "[schema.2]\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
(not defined $rv);
+ $sql = "";
+ $sql .= &schemasession1();
+ $sql .= &schemasession2();
+ $sql .= "INSERT INTO config VALUES ( 'version', '0.0.1' );";
+ &dbdo($dbh, $sql) || die;
return 1;
}
- # 0.0.24 introduced cache table
+ # 0.0.x upgrade to 0.0.24
#
elsif ( $dbv->{version}->{major} == 0
and $dbv->{version}->{minor} == 0
and $dbv->{version}->{patch} < 24 ) {
- $sql = &schemasession3();
- $rv = $dbh->do($sql);
- print "[schema.3]\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
(not defined $rv);
- $sql = sprintf("UPDATE config SET value = '0.0.24';");
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if (not
defined $rv);
+ $sql = "";
+ $sql .= &schemasession3();
+ $sql = "UPDATE config SET value = '0.0.24' WHERE ( key = 'version'
);";
+ &dbdo($dbh, $sql) || die;
return 1;
}
- # >0.0.24 upgrade to 0.6.0 is a nop
+ # 0.0.24 upgrade to 0.6.0
#
elsif ( $dbv->{version}->{major} == 0
and $dbv->{version}->{minor} < 6 ) {
- $sql = sprintf("UPDATE config SET value = '0.6.0';");
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if (not
defined $rv);
+ $sql = "";
+ $sql = "UPDATE config SET value = '0.6.0' WHERE ( key = 'version'
);";
+ &dbdo($dbh, $sql) || die;
return 1;
}
- # program data version and database version already match
- #
- elsif ( $dbv->{version}->{major} == $datavers->{major}
- and $dbv->{version}->{minor} == $datavers->{minor}
- and $dbv->{version}->{patch} == $datavers->{patch}) {
- print "database=" . $dbv->{version}->{major} . "."
- . $dbv->{version}->{minor} . "."
- . $dbv->{version}->{patch}
- . " is at exactly program datavers="
- . $datavers->{major} . "."
- . $datavers->{minor} . "."
- . $datavers->{patch}
- . "\n";
- return 0;
- }
-
# program data version and database version only differ in patchlevel
- just uprev the number
#
elsif ( $dbv->{version}->{major} == $datavers->{major}
and $dbv->{version}->{minor} == $datavers->{minor}
and $dbv->{version}->{patch} < $datavers->{patch}) {
- print "database=" . $dbv->{version}->{major} . "."
+ &debug("database=" . $dbv->{version}->{major} . "."
. $dbv->{version}->{minor} . "."
. $dbv->{version}->{patch}
. " is at program major/minor datavers="
. $datavers->{major} . "."
. $datavers->{minor} . "."
- . $datavers->{patch}
- . "\n";
+ . $datavers->{patch});
$sql = sprintf("UPDATE config SET value = '%s.%s.%s' WHERE ( key =
'version' );",
$datavers->{major},
$datavers->{minor},
$datavers->{patch});
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ &dbdo($dbh, $sql) || die;
return 1;
}
@@ -336,51 +438,41 @@
die "cannot derive database major.minor.patch triple from
value=".$dbv->{version}->{value};
}
-
- # database has no version and needs initialization from scratch
- #
- if ( $dbv->{version}->{major} == 0
- and $dbv->{version}->{minor} == 0
- and $dbv->{version}->{patch} == 0) {
- print "initializing database\n";
- $dbh->{AutoCommit} = 0;
- $dbh->begin_work;
- $sql = "";
- $sql .= &schemaregistry();
- $sql .= &schemaregistry2();
- $sql .= &funcregistry();
- $sql .= "INSERT INTO reg_config VALUES ( 'version', '".$progvers."'
);";
- $sql .= &sample() if ($progvers =~ m/^0\.0\./);
- $rv = $dbh->do($sql);
- $dbh->commit;
- print "[schema]\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
- $dbh->{AutoCommit} = 1;
- return 1;
- }
-
- # program data version and database version already match
+ # program data version and database version match
#
- elsif ( $dbv->{version}->{major} == $datavers->{major}
+ if ( $dbv->{version}->{major} == $datavers->{major}
and $dbv->{version}->{minor} == $datavers->{minor}
and $dbv->{version}->{patch} == $datavers->{patch}) {
- print "database=" . $dbv->{version}->{major} . "."
+ &debug("database=" . $dbv->{version}->{major} . "."
. $dbv->{version}->{minor} . "."
. $dbv->{version}->{patch}
. " is at exactly program datavers="
. $datavers->{major} . "."
. $datavers->{minor} . "."
- . $datavers->{patch}
- . "\n";
+ . $datavers->{patch});
return 0;
}
- # 0.[01].x upgrade to 0.2.0 is a nop
+ # 0.0.0 upgrade to 0.1.0 - initialization from scratch
+ #
+ elsif ( $dbv->{version}->{major} == 0
+ and $dbv->{version}->{minor} == 0
+ and $dbv->{version}->{patch} == 0) {
+ $sql = "";
+ $sql .= &schemaregistry();
+ $sql .= &funcregistry();
+ $sql .= "INSERT INTO reg_config VALUES ( 'version', '0.1.0' );";
+ &dbdo($dbh, $sql) || die;
+ return 1;
+ }
+
+
+ # 0.1.x upgrade to 0.2.0
#
elsif ( $dbv->{version}->{major} == 0
and $dbv->{version}->{minor} < 2 ) {
- $sql = sprintf("UPDATE reg_config SET value = '0.2.0';");
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ $sql = "UPDATE reg_config SET value = '0.2.0', mtime = now() WHERE (
key = 'version' );";
+ &dbdo($dbh, $sql) || die;
return 1;
}
@@ -388,14 +480,15 @@
#
elsif ( $dbv->{version}->{major} == 0
and $dbv->{version}->{minor} == 2 ) {
- $sql="";
- $sql .= sprintf("ALTER TABLE reg_statistic ALTER COLUMN time_first
SET DEFAULT CURRENT_TIMESTAMP;\n");
- $sql .= sprintf("ALTER TABLE reg_statistic ALTER COLUMN time_last
SET DEFAULT CURRENT_TIMESTAMP;\n");
- $sql .= sprintf("ALTER TABLE reg_statistic ALTER COLUMN count SET
DEFAULT 1;\n");
+ $sql = "";
+ $sql .= q{
+ ALTER TABLE reg_statistic ALTER COLUMN time_first SET DEFAULT
CURRENT_TIMESTAMP;
+ ALTER TABLE reg_statistic ALTER COLUMN time_last SET DEFAULT
CURRENT_TIMESTAMP;
+ ALTER TABLE reg_statistic ALTER COLUMN count SET DEFAULT 1;
+ };
$sql .= &funcregistry();
- $sql .= sprintf("UPDATE reg_config SET value = '0.3.0';\n");
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ $sql .= "UPDATE reg_config SET value = '0.3.0', mtime = now() WHERE
( key = 'version' );";
+ &dbdo($dbh, $sql) || die;
return 1;
}
@@ -403,11 +496,12 @@
#
elsif ( $dbv->{version}->{major} == 0
and $dbv->{version}->{minor} == 3 ) {
- $sql="";
- $sql .= sprintf("ALTER TABLE reg_user ADD COLUMN fullname TEXT;\n");
- $sql .= sprintf("UPDATE reg_config SET value = '0.4.0';\n");
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ $sql = "";
+ $sql .= q{
+ ALTER TABLE reg_user ADD COLUMN fullname TEXT;
+ };
+ $sql .= "UPDATE reg_config SET value = '0.4.0', mtime = now() WHERE
( key = 'version' );";
+ &dbdo($dbh, $sql) || die;
return 1;
}
@@ -416,12 +510,13 @@
elsif ( $dbv->{version}->{major} == 0
and $dbv->{version}->{minor} == 4) {
$sql = "";
- my $constraint = q{ CHECK (registry_orel ~
'^[^-]+-((CURRENT|CURRENT-[0-9]+|[^.-]+-STABLE|[^.-]+-STABLE-[0-9]+|[^.-]+\.[^.-]+-SOLID|[^.-]+\.[^.-]+-SOLID-[0-9]+|[^.-]+\.[^.-]+-RELEASE).*|[0-9]+\.[0-9]+)$')
};
- $sql .= sprintf("ALTER TABLE reg_instance DROP CONSTRAINT
reg_instance_registry_orel_check;\n");
- $sql .= sprintf("ALTER TABLE reg_instance ADD CONSTRAINT
reg_instance_registry_orel_check $constraint;\n");
- $sql .= sprintf("UPDATE reg_config SET value = '0.5.0';\n");
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ $sql .= q{
+ ALTER TABLE reg_instance DROP CONSTRAINT
reg_instance_registry_orel_check;
+ ALTER TABLE reg_instance ADD CONSTRAINT
reg_instance_registry_orel_check
+ CHECK (registry_orel ~
'^[^-]+-((CURRENT|CURRENT-[0-9]+|[^.-]+-STABLE|[^.-]+-STABLE-[0-9]+|[^.-]+\.[^.-]+-SOLID|[^.-]+\.[^.-]+-SOLID-[0-9]+|[^.-]+\.[^.-]+-RELEASE).*|[0-9]+\.[0-9]+)$');
+ };
+ $sql .= "UPDATE reg_config SET value = '0.5.0', mtime = now() WHERE
( key = 'version' );";
+ &dbdo($dbh, $sql) || die;
return 1;
}
@@ -431,9 +526,8 @@
and $dbv->{version}->{minor} == 5) {
$sql = "";
$sql .= &schemaregistry2();
- $sql .= sprintf("UPDATE reg_config SET value = '0.6.0';\n");
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ $sql .= "UPDATE reg_config SET value = '0.6.0', mtime = now() WHERE
( key = 'version' );";
+ &dbdo($dbh, $sql) || die;
return 1;
}
@@ -442,20 +536,18 @@
elsif ( $dbv->{version}->{major} == $datavers->{major}
and $dbv->{version}->{minor} == $datavers->{minor}
and $dbv->{version}->{patch} < $datavers->{patch}) {
- print "database=" . $dbv->{version}->{major} . "."
+ &debug("database=" . $dbv->{version}->{major} . "."
. $dbv->{version}->{minor} . "."
. $dbv->{version}->{patch}
. " is at program major/minor datavers="
. $datavers->{major} . "."
. $datavers->{minor} . "."
- . $datavers->{patch}
- . "\n";
- $sql = sprintf("UPDATE reg_config SET value = '%s.%s.%s' WHERE ( key
= 'version' );",
+ . $datavers->{patch});
+ $sql = sprintf("UPDATE reg_config SET value = '%s.%s.%s', mtime =
now() WHERE ( key = 'version' );",
$datavers->{major},
$datavers->{minor},
$datavers->{patch});
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ &dbdo($dbh, $sql) || die;
return 1;
}
@@ -743,3 +835,92 @@
EOT
}
+__END__
+##
+## MANUAL PAGE
+##
+
+=pod
+
+=head1 NAME
+
+B<registry-db> - OpenPKG Registry DataBase utility
+
+=head1 SYNOPSIS
+
+B<registry-db> [options] command
+ Available options:
+ [I<-p|prefix=<path>>]
+ [I<-C|config=<file>>]
+ [I<-D|debug>] [I<-H|help>] [I<-V|version>]
+ Available commands:
+ setup setup/upgrade database
+
+=head1 DESCRIPTION
+
+B<registry-db> is the DataBase utility for OpenPKG Registry Servers.
+It is used by administrators to setup the
+Registry Server and to review the default configuration, the contents
+of the used configuration file and the internal result of both being
+merged.
+
+=head1 OPTIONS
+
+The following options are available:
+
+=over 4
+
+=item B<-D>, B<--debug>
+
+Print verbose debug messages during operation.
+
+=item B<-H>, B<--help>
+
+Display brief usage message.
+
+=item B<-V>, B<--version>
+
+Print version and exit.
+
+=item B<-C>, B<--config=<file>>
+
+Specify configuration file to use.
+Default is C<@l_prefix@/etc/openpkg-registry/registry.cfg>
+
+=item B<-p>, B<--prefix=<path>>
+
+Specify path to prefix. Default is <@l_prefix>, overriden by environment
+variable OPENPKG_PREFIX and finally overridden by this option.
+
+=back
+
+=head1 COMMANDS
+
+The following commands are available:
+
+=over 4
+
+=item B<setup>
+
+Sets up DataBase from scratch, upgrades or updates it. Maintains
+tablespace, role, database and tables. After successfully running
+setup, all relations are fully functional but there is no data in the
+DataBase. This is an ideal precondition to start from scratch or running
+a restore.
+
+=back
+
+=head1 FILES
+
+Default cfg file C<@l_prefix@/etc/openpkg-registry/registry.cfg>
+
+=head1 SEE ALSO
+
+pg_dump(1), psql(1)
+
+=head1 AUTHOR
+
+Thomas Lotterer E<lt>[EMAIL PROTECTED]<gt>
+
+=cut
+
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [email protected]