# Populate the DB
# Copyright (C) 2000, 2001 James Troup <james@nocrew.org>
-# $Id: neve,v 1.3 2001-03-20 00:28:11 troup Exp $
+# $Id: neve,v 1.8 2002-02-12 22:14:38 troup Exp $
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
###############################################################################################################
-import commands, os, pg, re, sys, string, tempfile
+import commands, os, pg, re, string, tempfile
import apt_pkg
import db_access, utils
projectB.query("DELETE FROM suite")
for suite in Cnf.SubTree("Suite").List():
SubSec = Cnf.SubTree("Suite::%s" %(suite))
- projectB.query("INSERT INTO suite (suite_name, version, origin, description) VALUES ('%s', '%s', '%s', '%s')"
- % (string.lower(suite), SubSec["Version"], SubSec["Origin"], SubSec["Description"]))
+ projectB.query("INSERT INTO suite (suite_name) VALUES ('%s')" % string.lower(suite));
+ for i in ("Version", "Origin", "Description"):
+ if SubSec.has_key(i):
+ projectB.query("UPDATE suite SET %s = '%s' WHERE suite_name = '%s'" % (string.lower(i), SubSec[i], string.lower(suite)))
for architecture in Cnf.SubTree("Suite::%s::Architectures" % (suite)).List():
architecture_id = db_access.get_architecture_id (architecture);
projectB.query("INSERT INTO suite_architectures (suite, architecture) VALUES (currval('suite_id_seq'), %d)" % (architecture_id));
files_id_serial = files_id_serial + 1
files_query_cache.write("%d\t%s\t%s\t%s\t%d\n" % (files_id_serial, filename, size, md5sum, location_id));
files_id_cache[cache_key] = files_id_serial
-
+
return files_id_cache[cache_key]
##############################################################################################################
if suite == 'stable':
testing_id = db_access.get_suite_id("testing");
try:
- file = utils.open_file (filename, "r")
+ file = utils.open_file (filename);
except utils.cant_open_exc:
print "WARNING: can't open '%s'" % (filename);
return;
dsc_files_query_cache.write("%d\t%d\t%d\n" % (dsc_files_id_serial, tmp_source_id,id));
else:
tmp_source_id = source_cache[cache_key];
-
+
src_associations_id_serial = src_associations_id_serial + 1;
src_associations_query_cache.write("%d\t%d\t%d\n" % (src_associations_id_serial, suite_id, tmp_source_id))
# populate 'testing' with a mirror of 'stable'
def process_packages (location, filename, suite, component, archive):
global arch_all_cache, binary_cache, binaries_id_serial, binaries_query_cache, bin_associations_id_serial, bin_associations_query_cache;
-
+
count_total = 0;
count_bad = 0;
suite = string.lower(suite);
if suite == "stable":
testing_id = db_access.get_suite_id("testing");
try:
- file = utils.open_file (filename, "r")
+ file = utils.open_file (filename);
except utils.cant_open_exc:
print "WARNING: can't open '%s'" % (filename);
return;
tmp_binaries_id = binaries_id_serial;
else:
tmp_binaries_id = binary_cache[cache_key];
-
+
bin_associations_id_serial = bin_associations_id_serial + 1;
bin_associations_query_cache.write("%d\t%d\t%d\n" % (bin_associations_id_serial, suite_id, tmp_binaries_id));
if suite == "stable":
sources = location + prefix + 'Sources.gz';
(result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (sources, temp_filename));
if (result != 0):
- sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output));
- sys.exit(result);
+ utils.fubar("Gunzip invocation failed!\n%s" % (output), result);
print 'Processing '+sources+'...';
process_sources (location, temp_filename, suite, component, server);
os.unlink(temp_filename);
def main ():
global Cnf, projectB, query_cache, files_query_cache, source_query_cache, src_associations_query_cache, dsc_files_query_cache, bin_associations_query_cache, binaries_query_cache;
- apt_pkg.init();
-
- Cnf = apt_pkg.newConfiguration();
- apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
+ Cnf = utils.get_conf()
print "Re-Creating DB..."
(result, output) = commands.getstatusoutput("psql -f init_pool.sql")
if (result != 0):
- sys.exit(2)
+ utils.fubar("psql invocation failed!\n", result);
print output
projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]), None, None, 'postgres')
-
+
db_access.init (Cnf, projectB);
print "Adding static tables from conf file..."
# prefix = component + '/'
# do_sources(location, prefix);
else:
- sys.stderr.write("Unknown location type ('%s').\n" % (type));
- sys.exit(2);
-
+ utils.fubar("Unknown location type ('%s')." % (type));
+
# Process Packages files to populate `binaries' and friends
for location in Cnf.SubTree("Location").List():
process_packages (location, packages, suite, component, server);
elif type == "pool":
continue;
-
+
files_query_cache.close();
source_query_cache.close();
src_associations_query_cache.close();
(result, output) = commands.getstatusoutput("psql projectb < add_constraints.sql");
print output
if (result != 0):
- sys.stderr.write("psql invocation failed!\n");
- sys.exit(result);
-
+ utils.fubar("psql invocation failed!\n%s" % (output), result);
+
return;
-
+
if __name__ == '__main__':
main()