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: 24-Nov-2005 12:10:09
Branch: HEAD Handle: 2005112411100900
Modified files:
openpkg-registry VERSION registry-db.pl registry-ui.pl
Log:
make some some hard coded items configurable
Summary:
Revision Changes Path
1.3 +1 -1 openpkg-registry/VERSION
1.4 +221 -56 openpkg-registry/registry-db.pl
1.6 +28 -12 openpkg-registry/registry-ui.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-registry/VERSION
============================================================================
$ cvs diff -u -r1.2 -r1.3 VERSION
--- openpkg-registry/VERSION 19 Nov 2005 22:13:07 -0000 1.2
+++ openpkg-registry/VERSION 24 Nov 2005 11:10:09 -0000 1.3
@@ -2,5 +2,5 @@
VERSION -- Version Information for OpenPKG Registry (syntax: Text)
[automatically generated and maintained by GNU shtool]
- This is OpenPKG Registry, Version 0.0.16 (19-Nov-2005)
+ This is OpenPKG Registry, Version 0.0.23 (24-Nov-2005)
@@ .
patch -p0 <<'@@ .'
Index: openpkg-registry/registry-db.pl
============================================================================
$ cvs diff -u -r1.3 -r1.4 registry-db.pl
--- openpkg-registry/registry-db.pl 22 Nov 2005 12:16:49 -0000 1.3
+++ openpkg-registry/registry-db.pl 24 Nov 2005 11:10:09 -0000 1.4
@@ -37,8 +37,8 @@
# program name, version and date
my $progname="registry-db.pl";
-my $progvers="0.0.16";
-my $progdate="19-Nov-2005";
+my $progvers="0.0.23";
+my $progdate="24-Nov-2005";
# derive data version from program version
my $datavers={};
@@ -63,10 +63,9 @@
$cfg->{db}->{template1}->{password}="postgresql";
$cfg->{db}->{registry}->{username}="registry";
$cfg->{db}->{registry}->{password}="registry";
-
-
-# catch and hold time
-my $time = time();
+$cfg->{db}->{registry}->{tablespace}="registry";
+$cfg->{db}->{registry}->{host}="127.0.0.1";
+$cfg->{db}->{session}->{dbfile}="$PREFIX/var/openpkg-registry/ui/session.db";
# database handle and scratch variables
#
@@ -76,25 +75,45 @@
my $sth; # scratch statement handle for database operations
my $msg; # scratch variable for message fiddling
my $dbh; # database handle
+my $dbv; # database version
-sub dbinit($) {
- my ($dbname) = @_;
-
- return DBI->connect (
- "DBI:Pg:dbname=".$dbname.";host=".$cfg->{db}->{host},
- $cfg->{db}->{$dbname}->{username},
- $cfg->{db}->{$dbname}->{password},
- {
- PrintError => 0,
- RaiseError => 0,
- AutoCommit => 1
- }
- );
+sub dbopen($) {
+ my ($db) = @_;
+ my $dbi;
+ $dbi = undef;
+
+ print "==== processing Database $db ====\n";
+ if ($db eq "template1" or $db eq "registry") {
+ $dbi = DBI->connect (
+
"DBI:Pg:dbname=".$cfg->{db}->{registry}->{tablespace}.";host=".$cfg->{db}->{registry}->{host},
+ $cfg->{db}->{$db}->{username},
+ $cfg->{db}->{$db}->{password},
+ {
+ PrintError => 0,
+ RaiseError => 0,
+ AutoCommit => 1
+ }
+ );
+ }
+ elsif ($db eq "session") {
+ $dbi = DBI->connect (
+ "DBI:SQLite:dbname=".$cfg->{db}->{session}->{dbfile}, "", "",
+ {
+ PrintError => 0,
+ RaiseError => 0,
+ AutoCommit => 1
+ }
+ );
+ }
+ else {
+ die "dbopen does not know how to handle db=\"".$db."\"";
+ }
+ return $dbi;
}
# create user, tablespace and database
#
-$dbh = &dbinit("template1");
+$dbh = &dbopen("template1");
die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
$sql="CREATE USER registry ENCRYPTED PASSWORD 'registry' NOCREATEDB
NOCREATEUSER;";
@@ -113,44 +132,70 @@
# registry
#
-$dbh = &dbinit("registry");
+$dbh = &dbopen("registry");
die "ERROR:$0: DataBase error: ".$DBI::errstr."\n" if (not defined $dbh);
+while(&upgraderegistry()) {};
+$dbh->disconnect(); undef $dbh;
-my $reg_config;
-while(&upgrade()) {};
-
-# die gracefully
+# 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;
+
exit(0);
-sub upgrade()
+sub upgradesession()
{
- $sql="SELECT * FROM reg_config;";
+ ($dbv, $rv) = undef;
+
+ $sql="SELECT * FROM config;";
$rv = $dbh->selectall_hashref($sql, "key");
if (not defined %{$rv}->{version}) {
- $reg_config->{ 'version' => { 'key' => 'version', 'value' => '0.0.0'
} }
+ $dbv = { 'version' => { 'key' => 'version', 'value' => '0.0.0' } }
}
else {
- $reg_config=$rv;
+ $dbv=$rv;
}
- if($reg_config->{version}->{value} =~ m/^([0-9]+)\.([0-9]+)\.([0-9]+)$/)
{
- $reg_config->{version}->{major}=$1;
- $reg_config->{version}->{minor}=$2;
- $reg_config->{version}->{patch}=$3;
+ if($dbv->{version}->{value} =~ m/^([0-9]+)\.([0-9]+)\.([0-9]+)$/) {
+ $dbv->{version}->{major}=$1;
+ $dbv->{version}->{minor}=$2;
+ $dbv->{version}->{patch}=$3;
}
else {
- die "cannot derive database major.minor.patch triple from
value=".$reg_config->{version}->{value};
+ 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";
+ # 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
($dbh->errstr =~ m|ERROR|);
+ $sql = &schemasession2();
+ $rv = $dbh->do($sql);
+ print "[schema.2]\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ $sql = "INSERT INTO config VALUES ( 'version', '".$progvers."' );";
+ $rv = $dbh->do($sql);
+ print "[schema.v]\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ return 1;
}
# program data version and database version already match
#
- if ( $reg_config->{version}->{major} == $datavers->{major}
- and $reg_config->{version}->{minor} == $datavers->{minor}
- and $reg_config->{version}->{patch} == $datavers->{patch}) {
- print "database=" . %{$rv}->{version}->{major} . "."
- . %{$rv}->{version}->{minor} . "."
- . %{$rv}->{version}->{patch}
+ 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} . "."
@@ -161,18 +206,18 @@
# program data version and database version only differ in patchlevel
- just uprev the number
#
- elsif ( $reg_config->{version}->{major} == $datavers->{major}
- and $reg_config->{version}->{minor} == $datavers->{minor}
- and $reg_config->{version}->{patch} < $datavers->{patch}) {
- print "database=" . %{$rv}->{version}->{major} . "."
- . %{$rv}->{version}->{minor} . "."
- . %{$rv}->{version}->{patch}
+ 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 program major/minor datavers="
. $datavers->{major} . "."
. $datavers->{minor} . "."
. $datavers->{patch}
. "\n";
- $sql = sprintf("UPDATE reg_config SET value = '%s.%s.%s' WHERE ( key
= 'version' );",
+ $sql = sprintf("UPDATE config SET value = '%s.%s.%s' WHERE ( key =
'version' );",
$datavers->{major},
$datavers->{minor},
$datavers->{patch});
@@ -181,15 +226,55 @@
return 1;
}
+ # unsupported upgrade case
+ #
+ else {
+ print "program version=" . $progvers . " cannot handle database
version=" . $dbv->{version}->{value} . "\n";
+ print "database=" . $dbv->{version}->{major} . "."
+ . $dbv->{version}->{minor} . "."
+ . $dbv->{version}->{patch}
+ . " cannot be upgraded by this program which uses
datavers="
+ . $datavers->{major} . "."
+ . $datavers->{minor} . "."
+ . $datavers->{patch}
+ . "\n";
+ return 0;
+ }
+ die
+}
+
+sub upgraderegistry()
+{
+ $dbv = {};
+
+ $sql="SELECT * FROM reg_config;";
+ $rv = $dbh->selectall_hashref($sql, "key");
+ if (not defined %{$rv}->{version}) {
+ $dbv = { 'version' => { 'key' => 'version', 'value' => '0.0.0' } }
+ }
+ else {
+ $dbv=$rv;
+ }
+
+ if($dbv->{version}->{value} =~ m/^([0-9]+)\.([0-9]+)\.([0-9]+)$/) {
+ $dbv->{version}->{major}=$1;
+ $dbv->{version}->{minor}=$2;
+ $dbv->{version}->{patch}=$3;
+ }
+ else {
+ die "cannot derive database major.minor.patch triple from
value=".$dbv->{version}->{value};
+ }
+
+
# database has no version and needs initialization from scratch
#
- elsif ( $reg_config->{version}->{major} == 0
- and $reg_config->{version}->{minor} == 0
- and $reg_config->{version}->{patch} == 0) {
+ 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 = &schema();
+ $sql = &schemaregistry();
$sql .= "INSERT INTO reg_config VALUES ( 'version', '".$progvers."'
);";
$sql .= &sample() if ($progvers =~ m/^0\.0\./);
$rv = $dbh->do($sql);
@@ -199,13 +284,51 @@
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} . "."
+ . $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->{major},
+ $datavers->{minor},
+ $datavers->{patch});
+ $rv = $dbh->do($sql);
+ print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
+ return 1;
+ }
+
# unsupported upgrade case
#
else {
- print "program version=" . $progvers . " cannot handle database
version=" . %{$rv}->{version}->{value} . "\n";
- print "database=" . %{$rv}->{version}->{major} . "."
- . %{$rv}->{version}->{minor} . "."
- . %{$rv}->{version}->{patch}
+ print "program version=" . $progvers . " cannot handle database
version=" . $dbv->{version}->{value} . "\n";
+ print "database=" . $dbv->{version}->{major} . "."
+ . $dbv->{version}->{minor} . "."
+ . $dbv->{version}->{patch}
. " cannot be upgraded by this program which uses
datavers="
. $datavers->{major} . "."
. $datavers->{minor} . "."
@@ -216,7 +339,49 @@
die
}
-sub schema()
+sub schemasessionFIXME()
+{
+ return <<'EOT'
+ CREATE TABLE config ( key TEXT NOT NULL PRIMARY KEY, value TEXT NOT NULL
);
+ CREATE TABLE session ( id CHAR(36) NOT NULL PRIMARY KEY, a_session BLOB
NOT NULL );
+ return <<'EOT'
+EOT
+}
+
+sub schemasession1()
+{
+ return <<'EOT'
+ -- OpenPKG configuration
+ CREATE TABLE config (
+ key TEXT
+ NOT NULL
+ PRIMARY KEY,
+ -- generic key
+ -- [version]
+ value TEXT
+ NOT NULL
+ -- generic value
+ -- [0.8.15]
+ );
+EOT
+}
+
+sub schemasession2()
+{
+ return <<'EOT'
+ -- OpenPKG session
+ CREATE TABLE session (
+ id CHAR(36) NOT NULL PRIMARY KEY,
+ -- Session Identifier (OSSP::uuid based)
+ -- [75468374-8721-11d9-bee4-0002a5489f14]
+ a_session BLOB NOT NULL
+ -- Session Data (Storage based)
+ -- [XXXXXXX...]
+ );
+EOT
+}
+
+sub schemaregistry()
{
return <<'EOT'
-- OpenPKG configuration
@@ .
patch -p0 <<'@@ .'
Index: openpkg-registry/registry-ui.pl
============================================================================
$ cvs diff -u -r1.5 -r1.6 registry-ui.pl
--- openpkg-registry/registry-ui.pl 24 Nov 2005 11:08:42 -0000 1.5
+++ openpkg-registry/registry-ui.pl 24 Nov 2005 11:10:09 -0000 1.6
@@ -57,6 +57,10 @@
#
$cfg->{identification}->{mode} = "basicauth";
$cfg->{identification}->{default} = "[EMAIL PROTECTED]"; #anonymous
+$cfg->{db}->{registry}->{username}="registry";
+$cfg->{db}->{registry}->{password}="registry";
+$cfg->{db}->{registry}->{tablespace}="registry";
+$cfg->{db}->{registry}->{host}="127.0.0.1";
# create objects
my $cgi = new CGI;
@@ -71,17 +75,27 @@
my $msg; # scratch variable for message fiddling
my $dbh; # database handle
-sub dbinit() {
- return DBI->connect (
- "DBI:Pg:dbname=registry;host=127.0.0.1",
- "registry",
- "registry",
- {
- PrintError => 0,
- RaiseError => 0,
- AutoCommit => 0
- }
- );
+sub dbopen($) {
+ my ($db) = @_;
+ my $dbi;
+ $dbi = undef;
+
+ if ($db eq "registry") {
+ $dbi = DBI->connect (
+
"DBI:Pg:dbname=".$cfg->{db}->{registry}->{tablespace}.";host=".$cfg->{db}->{registry}->{host},
+ $cfg->{db}->{$db}->{username},
+ $cfg->{db}->{$db}->{password},
+ {
+ PrintError => 0,
+ RaiseError => 0,
+ AutoCommit => 0
+ }
+ );
+ }
+ else {
+ die "dbopen does not know how to handle db=\"".$db."\"";
+ }
+ return $dbi;
}
# first check for pages which do not require database access
@@ -110,7 +124,7 @@
# pages below require database access
#
-$dbh = &dbinit();
+$dbh = &dbopen("registry");
if (not defined $dbh) {
my $out;
$out = '';
@@ -126,6 +140,8 @@
exit(0)
}
+# continue to the pages that require database access
+#
if ($cgi->param("page") eq "login") {
my $out;
$out = '';
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [email protected]