From: James Troup Date: Tue, 5 Jun 2001 22:31:33 +0000 (+0000) Subject: sync X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=288ceb69f46d61999156d583a7d99436078c6b29;p=dak.git sync --- diff --git a/TODO b/TODO index d7c0811d..927c44ab 100644 --- a/TODO +++ b/TODO @@ -3,6 +3,8 @@ To fix Urgent ------ + + o katie should distingusih between can not read does not exist and perm denied. o heidi should use transactions diff --git a/contrib/hack.6 b/contrib/hack.6 new file mode 100755 index 00000000..1c21c1c2 --- /dev/null +++ b/contrib/hack.6 @@ -0,0 +1,273 @@ +#!/usr/bin/env python + +# Fix testing +# Copyright (C) 2000, 2001 James Troup +# $Id: hack.6,v 1.1 2001-06-05 22:31:33 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +################################################################################ + +# 'Too afraid to touch; too afraid you'll like too much' + +################################################################################ + +import pg, sys, os, string +import utils, db_access +import apt_inst, apt_pkg; + +################################################################################ + +Cnf = None; +projectB = None; + +################################################################################ + +def main (): + global Cnf, projectB, db_files, waste, excluded; + + apt_pkg.init(); + + Cnf = apt_pkg.newConfiguration(); + apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file()); + + Arguments = [('d',"debug","Christina::Options::Debug", "IntVal"), + ('h',"help","Christina::Options::Help"), + ('v',"version","Christina::Options::Version")]; + + apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv); + projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])); + christina = pg.connect('christina', Cnf["DB::Host"], int(Cnf["DB::Port"])); + db_access.init(Cnf, projectB); + + total = 0; found = 0; + morgue = Cnf["Dir::Morgue"] + '/' + Cnf["Rhona::MorgueSubDir"]; + + xxx = utils.open_file ("xxx", 'r'); + for line in xxx.readlines(): + (package, version, arch) = string.split(line); + eversion = utils.re_no_epoch.sub('', version); + total = total + 1; + if arch != "source": + #filename = "%s/%s_%s_%s.deb" % (morgue, package, eversion, arch); + filename = "%s/%s_%s.deb" % (morgue, package, eversion); + else: + continue + if os.access(filename, os.R_OK) == 0: + continue; + + control = apt_pkg.ParseSection(apt_inst.debExtractControl(utils.open_file(filename,"r"))); + deb_arch = control.Find("Architecture"); + if arch != deb_arch: + continue; + + arch_id = db_access.get_architecture_id (arch); + q = christina.query("SELECT f.*, l.path, b.* FROM binaries b, files f, location l WHERE b.package = '%s' AND b.architecture = %s AND b.version = '%s' AND b.file = f.id AND l.id = f.location" % (package, arch_id, version)); + ql = q.getresult(); + if len(ql) != 1: + print "YOU LOSE: "+package+"~"+version+"~"+arch+"~"+repr(ql) + continue; + ql = ql[0]; + + x = projectB.query("SELECT * FROM source WHERE id = %s" % (ql[11])); + xl = x.getresult(); + if len(xl) != 1: + old_filename = filename; + z = christina.query("SELECT f.*, l.path, s.*, df.* FROM source s, files f, location l, dsc_files df WHERE s.id = %s AND df.source = s.id AND df.file = f.id AND l.id = f.location" % (ql[11])); + zl = z.getresult(); + if len(zl) < 1: + print old_filename + print repr(ql); + print "SELECT f.*, l.path, s.*, df.* FROM source s, files f, location l, dsc_files df WHERE s.id = %s AND df.source = s.id AND df.file = f.id AND l.id = f.location" % (ql[11]); + print " ==> "+repr(zl); + #sys.exit(3); + else: + projectB.query("BEGIN WORK"); + gack = []; + for i in zl: + new_filename = i[6] + i[1]; + filename = morgue + '/' + os.path.basename(new_filename); + if os.access(filename, os.R_OK): + print filename + " -> " + new_filename; + if os.path.exists(new_filename): + sys.exit(3); + #utils.move(filename, new_filename); + print "INSERT INTO files (id, filename, size, md5sum, location) VALUES (%s, '%s', %s, '%s', %s)" % (i[:5]); + #projectB.query("INSERT INTO files (id, filename, size, md5sum, location) VALUES (%s, '%s', %s, '%s', %s)" % (i[:5])); + gack.append("INSERT INTO dsc_files (id, source, file) VALUES (%s, %s, %s)" % (i[12:])); + if new_filename[-4:] == ".dsc": + print "INSERT INTO source (id, source, version, maintainer, file) VALUES (%s, '%s', '%s', %s, %s)" % (i[7:12]); + #projectB.query("INSERT INTO source (id, source, version, maintainer, file) VALUES (%s, '%s', '%s', %s, %s)" % (i[7:12])); + for i in gack: + print i; + #projectB.query(i); + projectB.query("COMMIT WORK"); + filename = old_filename; + + projectB.query("BEGIN WORK"); + new_filename = ql[6] + ql[1]; + print filename + " -> " + new_filename; + if os.path.exists(new_filename): + sys.exit(3); + utils.move(filename, new_filename); + print "INSERT INTO files (id, filename, size, md5sum, location) VALUES (%s, '%s', %s, '%s', %s)" % (ql[:5]); + projectB.query("INSERT INTO files (id, filename, size, md5sum, location) VALUES (%s, '%s', %s, '%s', %s)" % (ql[:5])); + if ql[11] == 0: + print "INSERT INTO binaries (id, package, version, maintainer, architecture, file, type) VALUES (%s, '%s', '%s', %s, %s, %s, '%s')" % (ql[7], ql[8], ql[9], ql[10], ql[12], ql[13], ql[14]); + projectB.query("INSERT INTO binaries (id, package, version, maintainer, architecture, file, type) VALUES (%s, '%s', '%s', %s, %s, %s, '%s')" % (ql[7], ql[8], ql[9], ql[10], ql[12], ql[13], ql[14])); + else: + print "INSERT INTO binaries (id, package, version, maintainer, source, architecture, file, type) VALUES (%s, '%s', '%s', %s, %s, %s, %s, '%s')" % (ql[7:]); + projectB.query("INSERT INTO binaries (id, package, version, maintainer, source, architecture, file, type) VALUES (%s, '%s', '%s', %s, %s, %s, %s, '%s')" % (ql[7:])); + print "INSERT INTO bin_associations (suite, bin) VALUES (%s, %s)" % (4, ql[7]); + projectB.query("INSERT INTO bin_associations (suite, bin) VALUES (%s, %s)" % (4, ql[7])); + + projectB.query("COMMIT WORK"); + +####################################################################################### + +if __name__ == '__main__': + main() + +####################################################################################### + +# xxx = utils.open_file ("xxx", 'r'); +# for line in xxx.readlines(): +# (package, version, arch) = string.split(line); +# eversion = utils.re_no_epoch.sub('', version); +# total = total + 1; +# if arch == "source": +# filename = "%s/%s_%s.dsc" % (morgue, package, eversion); +# else: +# continue +# if os.access(filename, os.R_OK) == 0: +# continue; + +# arch_id = db_access.get_architecture_id (arch); +# q = christina.query("SELECT f.*, l.path, s.*, df.* FROM source s, files f, location l, dsc_files df WHERE s.source = '%s' AND s.version = '%s' AND df.source = s.id AND df.file = f.id AND l.id = f.location" % (package, version)); +# ql = q.getresult(); +# if len(ql) < 1: +# print "YOU LOSE: "+package+"~"+version+"~"+arch+"~"+repr(ql) +# continue; +# projectB.query("BEGIN WORK"); +# gack = []; +# for i in ql: +# new_filename = i[6] + i[1]; +# filename = morgue + '/' + os.path.basename(new_filename); +# if os.access(filename, os.R_OK) == 0: +# continue; +# print filename + " -> " + new_filename; +# if os.path.exists(new_filename): +# sys.exit(3); +# utils.move(filename, new_filename); +# print "INSERT INTO files (id, filename, size, md5sum, location) VALUES (%s, '%s', %s, '%s', %s)" % (i[:5]); +# projectB.query("INSERT INTO files (id, filename, size, md5sum, location) VALUES (%s, '%s', %s, '%s', %s)" % (i[:5])); +# gack.append("INSERT INTO dsc_files (id, source, file) VALUES (%s, %s, %s)" % (i[12:])); +# if new_filename[-4:] == ".dsc": +# print "INSERT INTO source (id, source, version, maintainer, file) VALUES (%s, '%s', '%s', %s, %s)" % (i[7:12]); +# projectB.query("INSERT INTO source (id, source, version, maintainer, file) VALUES (%s, '%s', '%s', %s, %s)" % (i[7:12])); +# print "INSERT INTO src_associations (suite, source) VALUES (%s, %s)" % (4, i[7]); +# projectB.query("INSERT INTO src_associations (suite, source) VALUES (%s, %s)" % (4, i[7])); +# #print repr(i) +# for i in gack: +# print i; +# projectB.query(i); +# projectB.query("COMMIT WORK"); + +####################################################################################### + +####################################################################################### + +# bad = {}; +# xxx = utils.open_file ("xxx", 'r'); +# for line in xxx.readlines(): +# (package, version, arch) = string.split(line); +# version = utils.re_no_epoch.sub('', version); +# total = total + 1; +# if arch != "source": +# filename = "%s/%s_%s_%s.deb" % (morgue, package, version, arch); +# else: +# filename = "%s/%s_%s.dsc" % (morgue, package, version); +# if os.access(filename, os.R_OK): +# found = found + 1; +# else: +# if arch != "source": +# filename = "%s/%s_%s.deb" % (morgue, package, version); +# if os.access(filename, os.R_OK): +# control = apt_pkg.ParseSection(apt_inst.debExtractControl(utils.open_file(filename,"r"))); +# deb_arch = control.Find("Architecture"); +# if arch == deb_arch: +# found = found + 1; +# continue; +# if arch != "source": +# xf = 0; +# arch_id = db_access.get_architecture_id (arch); +# q = projectB.query("SELECT version FROM binaries b, bin_associations ba WHERE b.package = '%s' AND b.architecture = %s AND ba.bin = b.id AND ba.suite = 5" % (package, arch_id)); +# ql = q.getresult(); +# if len(ql) != 1: +# q = projectB.query("SELECT version FROM binaries b, bin_associations ba WHERE b.package = '%s' AND b.architecture = %s AND ba.bin = b.id AND ba.suite = 2" % (package, arch_id)); +# ql = q.getresult(); +# if len(ql) != 1: +# #print "YOU LOSE: "+package+"~"+version+"~"+arch+"~"+repr(ql) +# continue; + +# unstable_version = ql[0][0]; +# print package+" "+unstable_version+" "+arch; +# found = found + 1; +# else: +# q = projectB.query("SELECT version FROM source s, src_associations sa WHERE s.source = '%s' AND sa.source = s.id AND sa.suite = 5" % (package)); +# ql = q.getresult(); +# if len(ql) != 1: +# q = projectB.query("SELECT version FROM source s, src_associations sa WHERE s.source = '%s' AND sa.source = s.id AND sa.suite = 2" % (package)); +# ql = q.getresult(); +# if len(ql) != 1: +# #print "YOU LOSE: "+package+"~"+version+"~"+arch+"~"+repr(ql) +# continue; + +# unstable_version = ql[0][0]; +# print package+" "+unstable_version+" "+arch; +# found = found + 1; + +# #print "Good: %d / %d (%.2f%%)" % (found, total, (float(found)/total*100)); +# #not_found = total - found; +# #print "Bad: %d / %d (%.2f%%)" % (not_found, total, (float(not_found)/total*100)); + +####################################################################################### + +# Pretty print bad stuff code + +# key = package+'~'+version; +# if not bad.has_key(key): +# bad[key] = []; +# bad[key].append(arch); + +# keys = bad.keys(); +# keys.sort(); +# for i in keys: +# print i+": "+repr(bad[i]); + + + +# Check if is in DB code + +# arch_id = db_access.get_architecture_id (arch); +# q = projectB.query("SELECT id FROM binaries WHERE package = '%s' AND version = '%s' AND architecture = %s" % (package, version, arch_id)); +# ql = q.getresult(); +# if ql != []: +# found = found + 1; + +# q = projectB.query("SELECT id FROM source WHERE source = '%s' AND version = '%s'" % (package, version)); +# ql = q.getresult(); +# if ql != []: +# found = found + 1;