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: 22-Nov-2005 13:16:49
Branch: HEAD Handle: 2005112212164900
Modified files:
openpkg-registry registry-db.pl
Log:
handle database upgrades, assuming that patches do not require changes
in schema
Summary:
Revision Changes Path
1.3 +69 -12 openpkg-registry/registry-db.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-registry/registry-db.pl
============================================================================
$ cvs diff -u -r1.2 -r1.3 registry-db.pl
--- openpkg-registry/registry-db.pl 19 Nov 2005 22:13:07 -0000 1.2
+++ openpkg-registry/registry-db.pl 22 Nov 2005 12:16:49 -0000 1.3
@@ -40,6 +40,18 @@
my $progvers="0.0.16";
my $progdate="19-Nov-2005";
+# derive data version from program version
+my $datavers={};
+$datavers->{value} = $progvers;
+if ($datavers->{value} =~ m/^([0-9]+)\.([0-9]+)\.([0-9]+)$/) {
+ $datavers->{major}=$1;
+ $datavers->{minor}=$2;
+ $datavers->{patch}=$3;
+}
+else {
+ 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 "");
@@ -127,13 +139,54 @@
$reg_config->{version}->{minor}=$2;
$reg_config->{version}->{patch}=$3;
}
+ else {
+ die "cannot derive database major.minor.patch triple from
value=".$reg_config->{version}->{value};
+ }
- if($reg_config->{version}->{value} eq $progvers) {
- print "database=" . %{$rv}->{version}->{value} . " is at my
version=" . $progvers . "\n";
+ # 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}
+ . " is at exactly program datavers="
+ . $datavers->{major} . "."
+ . $datavers->{minor} . "."
+ . $datavers->{patch}
+ . "\n";
return 0;
}
- elsif ($reg_config->{version}->{major} == 0 and
$reg_config->{version}->{minor} == 0 and $reg_config->{version}->{patch} == 0) {
- print "upgrading from version=" . %{$rv}->{version}->{value} . "\n";
+
+ # 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}
+ . " 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;
+ }
+
+ # 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) {
+ print "initializing database\n";
$dbh->{AutoCommit} = 0;
$dbh->begin_work;
$sql = &schema();
@@ -141,19 +194,23 @@
$sql .= &sample() if ($progvers =~ m/^0\.0\./);
$rv = $dbh->do($sql);
$dbh->commit;
- print "[schema]\nrv=".$rv." message=".$dbh->errstr."\n\n";
+ print "[schema]\nrv=".$rv." message=".$dbh->errstr."\n\n"; die if
($dbh->errstr =~ m|ERROR|);
$dbh->{AutoCommit} = 1;
return 1;
}
- elsif ($reg_config->{version}->{major} == 0 and
$reg_config->{version}->{minor} == 0) {
- print "upgrading from version=" . %{$rv}->{version}->{value} . "\n";
- $sql .= "INSERT INTO reg_config VALUES ( 'version', '".$progvers."'
);";
- $rv = $dbh->do($sql);
- print "$sql\nrv=".$rv." message=".$dbh->errstr."\n\n";
- return 0;
- }
+
+ # 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}
+ . " cannot be upgraded by this program which uses
datavers="
+ . $datavers->{major} . "."
+ . $datavers->{minor} . "."
+ . $datavers->{patch}
+ . "\n";
return 0;
}
die
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [email protected]