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: 14-Jul-2006 16:48:28 Branch: HEAD Handle: 2006071415482701 Modified files: openpkg-registry register.sh registry-db.pl registry-ui.pl Log: support capturing and storing data about every instances package and it's provides into the registry Summary: Revision Changes Path 1.41 +67 -19 openpkg-registry/register.sh 1.32 +96 -3 openpkg-registry/registry-db.pl 1.77 +174 -8 openpkg-registry/registry-ui.pl ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-registry/register.sh ============================================================================ $ cvs diff -u -r1.40 -r1.41 register.sh --- openpkg-registry/register.sh 14 Jul 2006 14:27:40 -0000 1.40 +++ openpkg-registry/register.sh 14 Jul 2006 14:48:27 -0000 1.41 @@ -118,6 +118,9 @@ REGISTRY_TRAN="$PREFIX/etc/openpkg/register.tran" REGISTRY_UTIL="$PREFIX/etc/openpkg/register.util" +# amount of data being posted +REGISTRY_DATA="request,package,provides" + # read baseline config early and allow options to override contents readconf @@ -206,6 +209,11 @@ if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi REGISTRY_UTIL="$arg" ;; + --data ) + if [ ".$arg" = . ]; then shift; arg="$1"; fi + if [ ".$arg" = . ]; then help="Missing argument to \"$opt\""; break; fi + REGISTRY_DATA="$arg" + ;; # debug options -v|--verbose ) verbose="yes" ;; @@ -237,7 +245,7 @@ echo "Usage: $progname -m|--mode=fake|post|wipe [-a|--args=<args>]" echo " -u|--user=<user> [-d|--desc=<text>]" echo " [--plat=<text>] [--orel=<text>] [--uuid=<file>]" - echo " [--conf=<file>] [--prep=<file>] [--tran=<file>] [--util=<file>]" + echo " [--conf=<file>] [--prep=<file>] [--tran=<file>] [--util=<file>] [--data=<tag>[,<tag>...]]" echo " [-P|--preparation] [-T|--transaction] [-U|--utilization]" echo " [-C|--convenience] [-I|--interaction]" echo " [-v|--verbose] [-h|--help]" @@ -274,23 +282,46 @@ [ ".$UUID_INSTANCE" = . ] && error "missing information UUID_INSTANCE" [ ".$UUID_PLATFORM" = . ] && error "missing information UUID_PLATFORM" - ( - echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>" - echo "<!DOCTYPE registry" - echo " PUBLIC \"-//OpenPKG//DTD OpenPKG Registry 0.0.1//EN\"" - echo " \"http://registry.openpkg.org/registry.dtd\" []>" - echo "<registry>" - echo " <request id=\"$UUID_REGISTRY\"" - echo " registry_user=\"$REGISTRY_USER\"" - echo " registry_desc=\"$REGISTRY_DESC\"" - echo " registry_plat=\"$REGISTRY_PLAT\"" - echo " registry_orel=\"$REGISTRY_OREL\"" - echo " uuid_registry=\"$UUID_REGISTRY\"" - echo " uuid_instance=\"$UUID_INSTANCE\"" - echo " uuid_platform=\"$UUID_PLATFORM\"" - echo " />" - echo "</registry>" - ) | tee $REGISTRY_PREP + # amount of data being posted + Q='"'; I=" "; N=$'\n'; D="" + + echo "$REGISTRY_DATA" | grep request >/dev/null + if [ $? = 0 ]; then + D="${D}<?xml version=${Q}1.0${Q} encoding=${Q}iso-8859-1${Q} standalone=${Q}no${Q}?>${N}" + D="${D}<!DOCTYPE registry${N}" + D="${D} PUBLIC ${Q}-//OpenPKG//DTD OpenPKG Registry 0.0.1//EN${Q}${N}" + D="${D} ${Q}http://registry.openpkg.org/registry.dtd${Q} []>${N}" + D="${D}<registry>${N}" + D="${D}${I}<request id=${Q}$UUID_REGISTRY${Q}${N}" + D="${D}${I}${I}registry_user=${Q}$REGISTRY_USER${Q}${N}" + D="${D}${I}${I}registry_desc=${Q}$REGISTRY_DESC${Q}${N}" + D="${D}${I}${I}registry_plat=${Q}$REGISTRY_PLAT${Q}${N}" + D="${D}${I}${I}registry_orel=${Q}$REGISTRY_OREL${Q}${N}" + D="${D}${I}${I}uuid_registry=${Q}$UUID_REGISTRY${Q}${N}" + D="${D}${I}${I}uuid_instance=${Q}$UUID_INSTANCE${Q}${N}" + D="${D}${I}${I}uuid_platform=${Q}$UUID_PLATFORM${Q}${N}" + + echo "$REGISTRY_DATA" | grep package >/dev/null + if [ $? = 0 ]; then + D="${D}${I}>${N}" + F="" + F="${F}${I}${I}<package id=${Q}%{PKGID}${Q} name=${Q}%{NAME}${Q} version=${Q}%{VERSION}${Q} release=${Q}%{RELEASE}${Q}" + echo "$REGISTRY_DATA" | grep provides >/dev/null + if [ $? = 0 ]; then + F="${F}>\n" + F="${F}[${I}${I}${I}<provides name=${Q}%{PROVIDENAME}${Q} flag=${Q}%{PROVIDEFLAGS:depflags}${Q} version=${Q}%{PROVIDEVERSION}${Q}/>\n]" + F="${F}${I}${I}</package>\n" + else + F="${F}/>\n" + fi + D="${D}`$rpm --qf \"${F}\" -qa`${N}" + D="${D} </request>${N}" + else + D="${D}${I}/>${N}" + fi + D="${D}</registry>${N}" + fi + echo "$D" | tee $REGISTRY_PREP } ## @@ -424,6 +455,7 @@ read -p "[REGISTRY_PLAT=\"$REGISTRY_PLAT\"] platform (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY" read -p "[REGISTRY_OREL=\"$REGISTRY_OREL\"] release (*)? "; [ ".$REPLY" != . ] && REGISTRY_DESC="$REPLY" read -p "[REGISTRY_UUID=\"$REGISTRY_UUID\"] uuid file to read? "; [ ".$REPLY" != . ] && REGISTRY_UUID="$REPLY" + read -p "[REGISTRY_DATA=\"$REGISTRY_DATA\"] data to prepare? "; [ ".$REPLY" != . ] && REGISTRY_DATA="$REPLY" read -p "[REGISTRY_PREP=\"$REGISTRY_PREP\"] prep dump file? "; [ ".$REPLY" != . ] && REGISTRY_PREP="$REPLY" [ ".$REGISTRY_USER" = . ] && error "missing information REGISTRY_USER" @@ -431,6 +463,7 @@ [ ".$REGISTRY_PLAT" = . ] && error "missing information REGISTRY_PLAT" [ ".$REGISTRY_OREL" = . ] && error "missing information REGISTRY_PREP" [ ".$REGISTRY_UUID" = . ] && error "missing information REGISTRY_UUID" + [ ".$REGISTRY_DATA" = . ] && error "missing information REGISTRY_DATA" [ ".$REGISTRY_PREP" = . ] && error "missing information REGISTRY_PREP" if [ -r "$REGISTRY_UUID" ]; then @@ -576,7 +609,7 @@ -u|--user=<user> [I<-d|--desc=<text>>] [I<--plat=<text>>] [I<--orel=<text>>] [I<--uuid=<file>>] [I<--conf=<file>>] [I<--prep=<file>>] [I<--tran=<file>>] - [I<--util=<file>>] + [I<--util=<file>>] [--data=<tag>[,<tag>...]] [I<-P|--preparation>] [I<-T|--transaction>] [I<-U|--utilization>] [I<-C|--convenience>] [I<-I|--interaction>] @@ -794,6 +827,16 @@ File to save a copy of the output from the "utilization" step. Defaults to F<${PREFIX}/etc/openpkg/register.util> +=item B<--data> + +Overrides C<${REGISTRY_DATA}> variable in C<${REGISTRY_CONF}> file. +Comma separated list of tags to prepare. Available tags are "request", +"package" and "provides". The "request" refers to the whole thing and +is mandatory. The "package" includes name-version-release information +for all installed packages and "provides" adds more details required to +capture package options. For details see OPENPKG_PREP below. +Defaults to "request,package,provides" + =back =head1 FILES @@ -830,6 +873,11 @@ uuid_instance="..." uuid_platform="..." /> + <package id="..." name="ssmtp" version="2.61" release="20050608"> + <provides name="ssmtp::with_ssl" flag="=" version="no"/> + <provides name="MTA" flag="" version=""/> + <provides name="ssmtp" flag="=" version="2.61-20050608"/> + </package> </registry> The XML request starts with <?xml version ...> and <!DOCTYPE registry ...> @@ . patch -p0 <<'@@ .' Index: openpkg-registry/registry-db.pl ============================================================================ $ cvs diff -u -r1.31 -r1.32 registry-db.pl --- openpkg-registry/registry-db.pl 14 Jul 2006 14:40:11 -0000 1.31 +++ openpkg-registry/registry-db.pl 14 Jul 2006 14:48:27 -0000 1.32 @@ -242,11 +242,11 @@ return 1; } - # >0.0.24 upgrade to 0.5.0 is a nop + # >0.0.24 upgrade to 0.6.0 is a nop # elsif ( $dbv->{version}->{major} == 0 - and $dbv->{version}->{minor} < 5 ) { - $sql = sprintf("UPDATE config SET value = '0.5.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); return 1; @@ -340,6 +340,7 @@ $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\./); @@ -417,6 +418,18 @@ return 1; } + # 0.5.x upgrade to 0.6.0 + # + elsif ( $dbv->{version}->{major} == 0 + 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|); + return 1; + } + # program data version and database version only differ in patchlevel - just uprev the number # elsif ( $dbv->{version}->{major} == $datavers->{major} @@ -630,6 +643,86 @@ EOT } +sub schemaregistry2() +{ + return <<'EOT' + -- package identifiers + CREATE TABLE pkg_ids ( + id TEXT + CHECK (id ~ '^[0-9a-f]{32}$'), + -- [d8f831be5def1d1dfb452c0a711e5903] + type TEXT + NOT NULL, + CHECK (type = 'db' OR type = 'rpm' OR type = 'srpm'), + -- [db] + PRIMARY KEY (id) + ); + + -- package name-version-release + CREATE TABLE nvr_names ( + name TEXT, + -- [ssmtp] + PRIMARY KEY (name) + ); + CREATE TABLE nvr_versions ( + version TEXT + CHECK (version ~ '^[^-]+$'), + -- [2.61] + PRIMARY KEY (version) + ); + CREATE TABLE nvr_releases ( + release TEXT + CHECK (release ~ '^[^-]+$'), + -- [20050608] + PRIMARY KEY (release) + ); + CREATE TABLE nvr ( + name TEXT REFERENCES nvr_names(name) ON DELETE CASCADE, + version TEXT REFERENCES nvr_versions(version) ON DELETE CASCADE, + release TEXT REFERENCES nvr_releases(release) ON DELETE CASCADE, + UNIQUE (name, version, release) + ); + -- provide name-flag-version + CREATE TABLE nfv_names ( + name TEXT, + -- [ssmtp] + PRIMARY KEY (name) + ); + CREATE TABLE nfv_flags ( + flag TEXT, + -- [=] + PRIMARY KEY (flag) + ); + CREATE TABLE nfv_versions ( + version TEXT, + -- [2.61-20050608] + PRIMARY KEY (version) + ); + CREATE TABLE nfv ( + name TEXT REFERENCES nfv_names(name) ON DELETE CASCADE, + flag TEXT REFERENCES nfv_flags(flag) ON DELETE CASCADE, + version TEXT REFERENCES nfv_versions(version) ON DELETE CASCADE, + UNIQUE (name, flag, version) + ); + -- instance package list + CREATE TABLE inst_pkg_list ( + ipl_inst TEXT REFERENCES reg_instance(uuid_registry) ON DELETE CASCADE, + ipl_pkg_id TEXT REFERENCES pkg_ids(id) ON DELETE CASCADE, + ipl_nvr_name TEXT, + ipl_nvr_version TEXT, + ipl_nvr_release TEXT, + FOREIGN KEY (ipl_nvr_name, ipl_nvr_version, ipl_nvr_release) + REFERENCES nvr(name, version, release) ON DELETE CASCADE, + ipl_nfv_name TEXT, + ipl_nfv_flag TEXT, + ipl_nfv_version TEXT, + FOREIGN KEY (ipl_nfv_name, ipl_nfv_flag, ipl_nfv_version) + REFERENCES nfv(name, flag, version) ON DELETE CASCADE, + UNIQUE (ipl_inst, ipl_pkg_id, ipl_nvr_name, ipl_nvr_version, ipl_nvr_release, ipl_nfv_name, ipl_nfv_flag, ipl_nfv_version) + ); +EOT +} + sub funcregistry() { return <<'EOT' @@ . patch -p0 <<'@@ .' Index: openpkg-registry/registry-ui.pl ============================================================================ $ cvs diff -u -r1.76 -r1.77 registry-ui.pl --- openpkg-registry/registry-ui.pl 13 Jul 2006 08:11:33 -0000 1.76 +++ openpkg-registry/registry-ui.pl 14 Jul 2006 14:48:28 -0000 1.77 @@ -89,6 +89,11 @@ dbfile "$PREFIX/var/openpkg-registry/ui/session.db"; }; }; + + # processing more than minimum request + request { + package 1; + }; # canvas integration # @@ -1605,6 +1610,7 @@ my $commit = 1; my @keys = keys %{$ref->{request}}; foreach my $k (@keys) { + $res->{$k} = ""; my $username; $username = $ref->{request}->{$k}->{registry_user}; @@ -1615,12 +1621,12 @@ if (not defined $rv) { $msg = $dbh->errstr; $msg =~ s/[ ]*ERROR:?[ ]*//; - $res->{$k} = sprintf("ERROR: DataBase reports %s", $msg); + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); $commit = 0; next; } elsif ($rv < 1) { - $res->{$k} = sprintf("ERROR: username \"%s\" not found", CGI::escapeHTML($username)); + $res->{$k} .= sprintf("ERROR: username \"%s\" not found;", CGI::escapeHTML($username)); $commit = 0; next; } @@ -1642,7 +1648,7 @@ } } else { - ; # reserved for nested structures + ; # reserved - ignore unknown data structures } } $sql = sprintf("UPDATE reg_instance SET registry_date = now(), %s WHERE ( uuid_registry = '%s' );", $fieldlist, $rowkey); @@ -1651,7 +1657,7 @@ if (not defined $rv) { $msg = $dbh->errstr; $msg =~ s/[ ]*ERROR:?[ ]*//; - $res->{$k} = sprintf("ERROR: DataBase reports %s", $msg); + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); $commit = 0; next; } @@ -1667,7 +1673,7 @@ #FIXME here we could check the validity of all fields with string 'uuid' in their names } else { - ; # reserved for nested structures + ; # reserved - ignore unknown data structures } } $sql = sprintf("INSERT INTO reg_instance (%s) VALUES (%s);", $fieldlist, $fieldbind); @@ -1676,17 +1682,177 @@ if (not defined $rv) { $msg = $dbh->errstr; $msg =~ s/[ ]*ERROR:?[ ]*//; - $res->{$k} = sprintf("ERROR: DataBase reports %s", $msg); + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); $commit = 0; next; } } if ($rv < 1) { - $res->{$k} = sprintf("ERROR: update and insert failed"); + $res->{$k} .= sprintf("ERROR: update and insert failed;"); $commit = 0; next; } - $res->{$k} = "DONE"; + + # maintain package and provides + # + my $package = $ref->{request}->{$k}->{package}; + if ($cfg->{request}->{package} and defined $package) { + + # prepare maintain package statement handles once and in advance + my $mpsth = {}; + $mpsth->{wipe} = $dbh->prepare(sprintf("DELETE FROM inst_pkg_list WHERE (ipl_inst = ?);")); + $mpsth->{pkg_ids} = $dbh->prepare(sprintf("INSERT INTO pkg_ids SELECT ?, 'db' WHERE NOT EXISTS (SELECT 1 FROM pkg_ids WHERE (id = ?));")); + $mpsth->{nvr_names} = $dbh->prepare(sprintf("INSERT INTO nvr_names SELECT ? WHERE NOT EXISTS (SELECT 1 FROM nvr_names WHERE (name = ?));")); + $mpsth->{nvr_versions} = $dbh->prepare(sprintf("INSERT INTO nvr_versions SELECT ? WHERE NOT EXISTS (SELECT 1 FROM nvr_versions WHERE (version = ?));")); + $mpsth->{nvr_releases} = $dbh->prepare(sprintf("INSERT INTO nvr_releases SELECT ? WHERE NOT EXISTS (SELECT 1 FROM nvr_releases WHERE (release = ?));")); + $mpsth->{nvr} = $dbh->prepare(sprintf("INSERT INTO nvr SELECT ?, ?, ? WHERE NOT EXISTS (SELECT 1 FROM nvr WHERE (name = ? AND version = ? AND release = ?));")); + $mpsth->{nfv_names} = $dbh->prepare(sprintf("INSERT INTO nfv_names SELECT ? WHERE NOT EXISTS (SELECT 1 FROM nfv_names WHERE (name = ?));")); + $mpsth->{nfv_flags} = $dbh->prepare(sprintf("INSERT INTO nfv_flags SELECT ? WHERE NOT EXISTS (SELECT 1 FROM nfv_flags WHERE (flag = ?));")); + $mpsth->{nfv_versions} = $dbh->prepare(sprintf("INSERT INTO nfv_versions SELECT ? WHERE NOT EXISTS (SELECT 1 FROM nfv_versions WHERE (version = ?));")); + $mpsth->{nfv} = $dbh->prepare(sprintf("INSERT INTO nfv SELECT ?, ?, ? WHERE NOT EXISTS (SELECT 1 FROM nfv WHERE (name = ? AND flag = ? AND version = ?));")); + $mpsth->{nfvshort} = $dbh->prepare(sprintf("INSERT INTO nfv SELECT ?, NULL, NULL WHERE NOT EXISTS (SELECT 1 FROM nfv WHERE (name = ? AND flag IS NULL AND version IS NULL));")); + $mpsth->{inst_pkg_list} = $dbh->prepare(sprintf("INSERT INTO inst_pkg_list VALUES (?, ?, ?, ?, ?, ?, ?, ?);")); + $mpsth->{inst_pkg_list_short} = $dbh->prepare(sprintf("INSERT INTO inst_pkg_list VALUES (?, ?, ?, ?, ?, ?, NULL, NULL);")); + + # wipe existing data for this instance, if any + $rv = $mpsth->{wipe}->execute($rowkey); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + PKG: for my $pkg (keys %{$package}) { + + # maintain package identifiers + $rv = $mpsth->{pkg_ids}->execute($pkg, $pkg); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + + # maintain name, version, release and name-version-release + $rv = $mpsth->{nvr_names}->execute($package->{$pkg}->{name}, $package->{$pkg}->{name}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + $rv = $mpsth->{nvr_versions}->execute($package->{$pkg}->{version}, $package->{$pkg}->{version}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + $rv = $mpsth->{nvr_releases}->execute($package->{$pkg}->{release}, $package->{$pkg}->{release}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + $rv = $mpsth->{nvr}->execute($package->{$pkg}->{name}, $package->{$pkg}->{version}, $package->{$pkg}->{release}, $package->{$pkg}->{name}, $package->{$pkg}->{version}, $package->{$pkg}->{release}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + + # assume at least a single provide for name = version-release, fake it if it is missing + if (not exists $package->{$pkg}->{provides}) { + $package->{$pkg}->{provides} = [ + { + 'version' => $package->{$pkg}->{name}, + 'flag' => '=', + 'name' => $package->{$pkg}->{version} . "-" . $package->{$pkg}->{release} + } + ]; + } + foreach my $prv (@{$package->{$pkg}->{provides}}) { + # maintain name, flag, version, name-flag-version + $rv = $mpsth->{nfv_names}->execute($prv->{name}, $prv->{name}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + if ($prv->{flag} ne '' and $prv->{version} ne '') { + $rv = $mpsth->{nfv_flags}->execute($prv->{flag}, $prv->{flag}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + $rv = $mpsth->{nfv_versions}->execute($prv->{version}, $prv->{version}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + $rv = $mpsth->{nfv}->execute($prv->{name}, $prv->{flag}, $prv->{version}, $prv->{name}, $prv->{flag}, $prv->{version}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + } + else { + $rv = $mpsth->{nfvshort}->execute($prv->{name}, $prv->{name}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + } + + # maintain inst_pkg_list + if ($prv->{flag} ne '' and $prv->{version} ne '') { + $rv = $mpsth->{inst_pkg_list}->execute($rowkey, $pkg, $package->{$pkg}->{name}, $package->{$pkg}->{version}, $package->{$pkg}->{release}, $prv->{name}, $prv->{flag}, $prv->{version}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + } + else { + $rv = $mpsth->{inst_pkg_list_short}->execute($rowkey, $pkg, $package->{$pkg}->{name}, $package->{$pkg}->{version}, $package->{$pkg}->{release}, $prv->{name}); + if (not defined $rv) { + $msg = $dbh->errstr; + $msg =~ s/[ ]*ERROR:?[ ]*//; $msg =~ s/\n+/ /gs; + $res->{$k} .= sprintf("ERROR: DataBase reports %s;", $msg); + $commit = 0; + next PKG; + } + } + } + } + } + + # success with instance + $res->{$k} = "DONE" if ($res->{$k} eq ""); } if ($commit == 1) { @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List openpkg-cvs@openpkg.org