]> git.decadent.org.uk Git - dak.git/blobdiff - catherine
Add new top level directories
[dak.git] / catherine
index 70996a9f37690c703acd4290f9667ce441fcbb44..66efca2d60a8283ebc8fb501e2334e8f15daf28e 100755 (executable)
--- a/catherine
+++ b/catherine
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 
 # Poolify (move packages from "legacy" type locations to pool locations)
-# Copyright (C) 2000, 2001  James Troup <james@nocrew.org>
-# $Id: catherine,v 1.11 2001-09-27 01:22:51 troup Exp $
+# Copyright (C) 2000, 2001, 2002, 2003, 2004  James Troup <james@nocrew.org>
+# $Id: catherine,v 1.19 2004-03-11 00:20:51 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
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
+################################################################################
+
 # "Welcome to where time stands still,
 #  No one leaves and no one will."
 #   - Sanitarium - Metallica / Master of the puppets
 
 ################################################################################
 
-import os, pg, stat, string, sys
-import utils, db_access
+import os, pg, re, stat, sys;
+import utils, db_access;
 import apt_pkg, apt_inst;
 
 ################################################################################
@@ -33,6 +35,8 @@ import apt_pkg, apt_inst;
 Cnf = None;
 projectB = None;
 
+re_isadeb = re.compile (r"(.+?)_(.+?)(_(.+))?\.u?deb$");
+
 ################################################################################
 
 def usage (exit_code=0):
@@ -70,16 +74,16 @@ def poolize (q, limit, verbose, no_action):
         if (poolized_size + size) > limit and limit >= 0:
             utils.warn("Hit %s limit." % (utils.size_type(limit)));
             break;
-        poolized_size = poolized_size + size;
-        poolized_count = poolized_count + 1;
+        poolized_size += size;
+        poolized_count += 1;
         base_filename = os.path.basename(legacy_filename);
         destination_filename = base_filename;
         # Work out the source package name
-        if utils.re_isadeb.match(base_filename) != None:
-            control = apt_pkg.ParseSection(apt_inst.debExtractControl(utils.open_file(legacy_filename,"r")))
+        if re_isadeb.match(base_filename):
+            control = apt_pkg.ParseSection(apt_inst.debExtractControl(utils.open_file(legacy_filename)))
             package = control.Find("Package", "");
             source = control.Find("Source", package);
-            if string.find(source, "(") != -1:
+            if source.find("(") != -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
@@ -91,16 +95,16 @@ def poolize (q, limit, verbose, no_action):
             destination_filename = "%s_%s_%s.deb" % (package, version, architecture);
         else:
             m = utils.re_issource.match(base_filename)
-            if m != None:
+            if m:
                 source = m.group(1);
             else:
-                utils.fubar("expandsion of source filename '%s' failed." % (legacy_filename));
+                utils.fubar("expansion of source filename '%s' failed." % (legacy_filename));
         # Work out the component name
         component = qid["component"];
         if component == "":
             q = projectB.query("SELECT DISTINCT(c.name) FROM override o, component c WHERE o.package = '%s' AND o.component = c.id;" % (source));
             ql = q.getresult();
-            if ql == []:
+            if not ql:
                 utils.fubar("No override match for '%s' so I can't work out the component." % (source));
             if len(ql) > 1:
                 utils.fubar("Multiple override matches for '%s' so I can't work out the component." % (source));
@@ -114,7 +118,7 @@ def poolize (q, limit, verbose, no_action):
         # First move the files to the new location
         pool_location = utils.poolify (source, component);
         pool_filename = pool_location + destination_filename;
-        destination = Cnf["Dir::PoolDir"] + pool_location + destination_filename;
+        destination = Cnf["Dir::Pool"] + pool_location + destination_filename;
         if os.path.exists(destination):
             utils.fubar("'%s' already exists in the pool; serious FUBARity." % (legacy_filename));
         if verbose:
@@ -134,17 +138,17 @@ def poolize (q, limit, verbose, no_action):
 def main ():
     global Cnf, projectB;
 
-    apt_pkg.init();
+    Cnf = utils.get_conf()
+
+    for i in ["help", "limit", "no-action", "verbose" ]:
+       if not Cnf.has_key("Catherine::Options::%s" % (i)):
+           Cnf["Catherine::Options::%s" % (i)] = "";
 
-    Cnf = apt_pkg.newConfiguration();
-    apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
 
     Arguments = [('h',"help","Catherine::Options::Help"),
                  ('l',"limit", "Catherine::Options::Limit", "HasArg"),
                  ('n',"no-action","Catherine::Options::No-Action"),
                  ('v',"verbose","Catherine::Options::Verbose")];
-    for i in ["help", "limit", "no-action", "verose" ]:
-        Cnf["Catherine::Options::%s" % (i)] = "";
 
     apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv);
     Options = Cnf.SubTree("Catherine::Options")
@@ -172,13 +176,13 @@ def main ():
     q = projectB.query("""
 SELECT l.path, f.filename, f.id as files_id, c.name as component
    FROM files f, location l, component c WHERE
-    NOT EXISTS (SELECT * FROM location l WHERE l.type = 'pool' AND f.location = l.id)
+    NOT EXISTS (SELECT 1 FROM location l WHERE l.type = 'pool' AND f.location = l.id)
     AND NOT (f.filename ~ '^potato') AND f.location = l.id AND l.component = c.id
 UNION SELECT l.path, f.filename, f.id as files_id, null as component
    FROM files f, location l WHERE
-    NOT EXISTS (SELECT * FROM location l WHERE l.type = 'pool' AND f.location = l.id)
+    NOT EXISTS (SELECT 1 FROM location l WHERE l.type = 'pool' AND f.location = l.id)
     AND NOT (f.filename ~ '^potato') AND f.location = l.id AND NOT EXISTS
-     (SELECT l.path FROM location l WHERE l.component IS NOT NULL AND f.location = l.id);""");
+     (SELECT 1 FROM location l WHERE l.component IS NOT NULL AND f.location = l.id);""");
 
     poolize(q, limit, Options["Verbose"], Options["No-Action"]);