# Poolify (move packages from "legacy" type locations to pool locations)
# Copyright (C) 2000 James Troup <james@nocrew.org>
-# $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
################################################################################
-import os, pg, stat, sys
+import os, pg, stat, string, sys
import utils, db_access
import apt_pkg, apt_inst;
('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);
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);
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;
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", "");
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));