X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=katie;h=80a064454d9ccd4b837c08f90e67cbfa1eb728b3;hb=e8eacb00ee41d7ab974ba913fff40e5c082b8e1a;hp=3656f428524e6abc1e0870720a36c6e5fbbd0ea0;hpb=bb8283ad6274e461fc78a00b2a52c6594c53e13d;p=dak.git diff --git a/katie b/katie index 3656f428..80a06445 100755 --- a/katie +++ b/katie @@ -2,7 +2,7 @@ # Installs Debian packaes # Copyright (C) 2000 James Troup -# $Id: katie,v 1.9 2000-12-05 04:27:48 troup Exp $ +# $Id: katie,v 1.10 2000-12-13 03:18:50 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 @@ -130,7 +130,7 @@ def read_override_file (filename, suite, component): # See if a given package is in the override file. Caches and only loads override files on demand. -def in_override_p (package, component, suite): +def in_override_p (package, component, suite, binary_type): global overrides; # Avoid on unknown distributions @@ -149,9 +149,13 @@ def in_override_p (package, component, suite): override_filename = Cnf["Dir::OverrideDir"] + 'override.' + Cnf["Suite::%s::OverrideCodeName" % (suite)]; read_override_file (override_filename, suite, component); else: # all others. - for src in ("", ".src"): - override_filename = Cnf["Dir::OverrideDir"] + 'override.' + Cnf["Suite::%s::OverrideCodeName" % (suite)] + '.' + component + src; + if binary_type == "udeb": + override_filename = Cnf["Dir::OverrideDir"] + 'override.' + Cnf["Suite::%s::OverrideCodeName" % (suite)] + '.debian-installer.' + component; read_override_file (override_filename, suite, component); + else: + for src in ("", ".src"): + override_filename = Cnf["Dir::OverrideDir"] + 'override.' + Cnf["Suite::%s::OverrideCodeName" % (suite)] + '.' + component + src; + read_override_file (override_filename, suite, component); return overrides[suite][component].get(package, None); @@ -365,7 +369,7 @@ def check_files(): continue # See if the package is NEW - if not in_override_p(files[file]["package"], files[file]["component"], suite): + if not in_override_p(files[file]["package"], files[file]["component"], suite, files[file].get("dbtype","")): files[file]["new"] = 1 # Find any old binary packages @@ -427,7 +431,7 @@ def check_files(): def check_dsc (): global dsc, dsc_files, reject_message, reprocess, orig_tar_id; - + for file in files.keys(): if files[file]["type"] == "dsc": try: @@ -458,13 +462,14 @@ def check_dsc (): reject_message = reject_message + "Rejected: can not overwrite existing copy of '%s' already in the archive.\n" % (dsc_file) elif dsc_file[-12:] == ".orig.tar.gz": # Check in the pool - q = projectB.query("SELECT l.path, f.filename, l.type, f.id FROM files f, location l WHERE f.filename ~ '%s' AND l.id = f.location" % (utils.regex_safe(dsc_file))); + q = projectB.query("SELECT l.path, f.filename, l.type, f.id, l.id FROM files f, location l WHERE f.filename ~ '%s' AND l.id = f.location" % (utils.regex_safe(dsc_file))); ql = q.getresult(); if len(ql) > 0: old_file = ql[0][0] + ql[0][1]; actual_md5 = apt_pkg.md5sum(utils.open_file(old_file,"r")); found = old_file; suite_type = ql[0][2]; + dsc_files[dsc_file]["location id"] = ql[0][4]; # need this for updating dsc_files in install() # See install()... if suite_type == "legacy" or suite_type == "legacy-mixed": orig_tar_id = ql[0][3]; @@ -641,13 +646,17 @@ def install (changes_filename, summary, short_summary): projectB.query("INSERT INTO dsc_files (source, file) VALUES (currval('source_id_seq'), %d)" % (files[file]["files id"])); for dsc_file in dsc_files.keys(): filename = files[file]["pool name"] + dsc_file; - files_id = db_access.get_files_id(filename, dsc_files[dsc_file]["size"], dsc_files[dsc_file]["md5sum"], files[file]["location id"]); + # use location id from dsc_files first if it exists as + # the .orig.tar.gz may still be in a legacy location + location_id = dsc_files[dsc_file].get("location id", None); + if location_id == None: + location_id = files[file]["location id"]; + files_id = db_access.get_files_id(filename, dsc_files[dsc_file]["size"], dsc_files[dsc_file]["md5sum"], location_id); # FIXME: needs to check for -1/-2 and or handle exception if files_id == None: - files_id = db_access.set_files_id (filename, dsc_files[dsc_file]["size"], dsc_files[dsc_file]["md5sum"], files[file]["location id"]); + files_id = db_access.set_files_id (filename, dsc_files[dsc_file]["size"], dsc_files[dsc_file]["md5sum"], location_id); projectB.query("INSERT INTO dsc_files (source, file) VALUES (currval('source_id_seq'), %d)" % (files_id)); - # Add the .deb files to the DB for file in files.keys(): if files[file]["type"] == "deb": @@ -682,20 +691,6 @@ def install (changes_filename, summary, short_summary): suite_id = db_access.get_suite_id(suite); projectB.query("INSERT INTO bin_associations (suite, bin) VALUES (%d, currval('binaries_id_seq'))" % (suite_id)); - # Install the files into the pool - for file in files.keys(): - if files[file].has_key("byhand"): - continue - destination = Cnf["Dir::PoolDir"] + files[file]["pool name"] + file - destdir = os.path.dirname(destination) - utils.move (file, destination) - install_bytes = install_bytes + float(files[file]["size"]) - - # Copy the .changes file across for suite which need it. - for suite in changes["distribution"].keys(): - if Cnf.has_key("Suite::%s::CopyChanges" % (suite)): - utils.copy (changes_filename, Cnf["Dir::RootDir"] + Cnf["Suite::%s::CopyChanges" % (suite)]); - # If the .orig.tar.gz is in a legacy directory we need to poolify # it, so that apt-get source (and anything else that goes by the # "Directory:" field in the Sources.gz file) works. @@ -723,6 +718,20 @@ def install (changes_filename, summary, short_summary): # Remove old data from the DB: files table projectB.query("DELETE FROM files WHERE id = %s" % (qid["files_id"])); + # Install the files into the pool + for file in files.keys(): + if files[file].has_key("byhand"): + continue + destination = Cnf["Dir::PoolDir"] + files[file]["pool name"] + file + destdir = os.path.dirname(destination) + utils.move (file, destination) + install_bytes = install_bytes + float(files[file]["size"]) + + # Copy the .changes file across for suite which need it. + for suite in changes["distribution"].keys(): + if Cnf.has_key("Suite::%s::CopyChanges" % (suite)): + utils.copy (changes_filename, Cnf["Dir::RootDir"] + Cnf["Suite::%s::CopyChanges" % (suite)]); + projectB.query("COMMIT WORK"); utils.move (changes_filename, Cnf["Dir::IncomingDir"] + 'DONE/' + os.path.basename(changes_filename)) @@ -864,7 +873,7 @@ Subject: %s REJECTED %s === -%s""" % (Cnf["Dinstall::MyEmailAddress"], changes["maintainer822"], changes_filename, reject_message, reject_footer); +%s""" % (Cnf["Dinstall::MyEmailAddress"], changes["maintainer822"], os.path.basename(changes_filename), reject_message, reject_footer); else: # Have a manual rejection file to use reject_mail_message = ""; # avoid 's @@ -889,7 +898,7 @@ Subject: %s REJECTED %s %s === -%s""" % (user_email_address, Cnf["Dinstall::MyEmailAddress"], changes["maintainer822"], changes_filename, manual_reject_message, reject_message, reject_footer) +%s""" % (user_email_address, Cnf["Dinstall::MyEmailAddress"], changes["maintainer822"], os.path.basename(changes_filename), manual_reject_message, reject_message, reject_footer) # Write the rejection email out as the .reason file reason_filename = re_changes.sub("reason", os.path.basename(changes_filename));