X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=catherine;fp=catherine;h=d4f497d2d5ca775f23958c220baa97c550fc65e5;hb=3b2605da7eed3cea75b609856a352ab5adc66f70;hp=4015319d19245734e386a7dbfc72bdb109bde74f;hpb=9a82176a99868c8187c23314eec1af3132b05a95;p=dak.git diff --git a/catherine b/catherine index 4015319d..d4f497d2 100755 --- a/catherine +++ b/catherine @@ -2,7 +2,7 @@ # Poolify (move packages from "legacy" type locations to pool locations) # Copyright (C) 2000 James Troup -# $Id: catherine,v 1.3 2001-02-04 04:27:18 troup Exp $ +# $Id: catherine,v 1.4 2001-02-09 22:15:27 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 @@ -24,7 +24,7 @@ ################################################################################ -import os, pg, stat, sys +import os, pg, stat, string, sys import utils, db_access import apt_pkg, apt_inst; @@ -47,7 +47,8 @@ def main (): ('h',"help","Catherine::Options::Help"), ('V',"version","Catherine::Options::Version"), ('l',"limit", "Catherine::Options::Limit", "HasArg"), - ('n',"no-action","Catherine::Options::No-Action")]; + ('n',"no-action","Catherine::Options::No-Action"), + ('v',"verbose","Catherine::Options::Verbose")]; amount = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv); @@ -56,10 +57,19 @@ def main (): poolized_size = 0; poolized_count = 0; - limit = int(Cnf["Catherine::Options::Limit"]) * 1024; + + # Parse -l/--limit argument + if not Cnf["Catherine::Options::Limit"]: + limit = -1; + else: + limit = int(Cnf["Catherine::Options::Limit"]) * 1024; + + # -n/--no-action implies -v/--verbose + if Cnf["Catherine::Options::No-Action"]: + Cnf["Catherine::Options::Verbose"] = "true"; # Sanity check the limit argument - if limit != 0 and limit < 1024: + if limit > 0 and limit < 1024: sys.stderr.write("-l/--limit takes an argument with a value in kilobytes.\n"); sys.exit(1); @@ -78,7 +88,7 @@ UNION SELECT l.path, f.filename, f.id as files_id, null as component for qid in qd: legacy_filename = qid["path"]+qid["filename"]; size = os.stat(legacy_filename)[stat.ST_SIZE]; - if (poolized_size + size) > limit: + if (poolized_size + size) > limit and limit >= 0: sys.stderr.write("Hit %s limit.\n" % (utils.size_type(limit))); break; poolized_size = poolized_size + size; @@ -90,6 +100,9 @@ UNION SELECT l.path, f.filename, f.id as files_id, null as component control = apt_pkg.ParseSection(apt_inst.debExtractControl(utils.open_file(legacy_filename,"r"))) package = control.Find("Package", ""); source = control.Find("Source", package); + if string.find(source, "(") != -1: + m = utils.re_extract_src_version.match(source) + source = m.group(1) # If it's a binary, we need to also rename the file to include the architecture version = control.Find("Version", ""); architecture = control.Find("Architecture", ""); @@ -131,17 +144,15 @@ UNION SELECT l.path, f.filename, f.id as files_id, null as component if os.path.exists(destination): sys.stderr.write("%s: already exists in the pool; serious FUBARity.\n" % (legacy_filename)); sys.exit(1); - if Cnf["Catherine::Options::No-Action"]: + if Cnf["Catherine::Options::Verbose"]: print "Moving: %s -> %s" % (legacy_filename, destination); - else: - foo = foo + 1; - #utils.move(legacy_filename, destination); + if not Cnf["Catherine::Options::No-Action"]: + utils.move(legacy_filename, destination); # Then Update the DB's files table - if Cnf["Catherine::Options::No-Action"]: + if Cnf["Catherine::Options::Verbose"]: print "SQL: UPDATE files SET filename = '%s', location = '%s' WHERE id = '%s'" % (pool_filename, location_id, qid["files_id"]); - else: - foo = foo + 1; - #q = projectB.query("UPDATE files SET filename = '%s', location = '%s' WHERE id = '%s'" % (pool_filename, dsc_location_id, qid["files_id"])); + if not Cnf["Catherine::Options::No-Action"]: + q = projectB.query("UPDATE files SET filename = '%s', location = '%s' WHERE id = '%s'" % (pool_filename, location_id, qid["files_id"])); sys.stderr.write("Poolized %s in %s files.\n" % (utils.size_type(poolized_size), poolized_count));