]> git.decadent.org.uk Git - dak.git/blobdiff - claire.py
* katie.py (in_override_p): when searching for a source override, and the...
[dak.git] / claire.py
index 9982d2166ff4e50c4d9de83035234898d9eec0e0..70e42f37935f7568a1d9eb515b56d1e74f7f9da0 100755 (executable)
--- a/claire.py
+++ b/claire.py
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 
 # 'Fix' stable to make debian-cd and dpkg -BORGiE users happy
-# Copyright (C) 2000, 2001  James Troup <james@nocrew.org>
-# $Id: claire.py,v 1.11 2001-11-18 19:57:58 rmurray Exp $
+# Copyright (C) 2000, 2001, 2002  James Troup <james@nocrew.org>
+# $Id: claire.py,v 1.17 2002-06-08 00:15:57 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
@@ -41,7 +41,7 @@ projectB = None;
 
 def usage (exit_code=0):
     print """Usage: claire [OPTIONS]
-Create compatability symlinks from legacy locations to the pool.
+Create compatibility symlinks from legacy locations to the pool.
 
   -v, --verbose              explain what is being done
   -h, --help                 show this help and exit"""
@@ -56,10 +56,8 @@ def clean_symlink (src, dest, root):
     src = string.replace(src, root, '', 1);
     dest = string.replace(dest, root, '', 1);
     dest = os.path.dirname(dest);
-    new_src = '';
-    for i in xrange(len(string.split(dest, '/'))):
-        new_src = new_src + '../';
-    return new_src + src
+    new_src = '../' * len(string.split(dest, '/'));
+    return new_src + src;
 
 ################################################################################
 
@@ -82,6 +80,8 @@ def fix_component_section (component, section):
 def find_dislocated_stable(Cnf, projectB):
     dislocated_files = {}
 
+    codename = Cnf["Suite::Stable::Codename"];
+
     # Source
     q = projectB.query("""
 SELECT DISTINCT ON (f.id) c.name, sec.section, l.path, f.filename, f.id
@@ -90,33 +90,33 @@ SELECT DISTINCT ON (f.id) c.name, sec.section, l.path, f.filename, f.id
     WHERE su.suite_name = 'stable' AND sa.suite = su.id AND sa.source = s.id
       AND f2.id = s.file AND f2.location = l2.id AND df.source = s.id
       AND f.id = df.file AND f.location = l.id AND o.package = s.source
-      AND sec.id = o.section AND NOT (f.filename ~ '^potato/')
+      AND sec.id = o.section AND NOT (f.filename ~ '^%s/')
       AND l.component = c.id AND o.suite = su.id
-UNION SELECT DISTINCT ON (f.id) null, sec.section, l.path, f.filename, f.id
-    FROM component c, override o, section sec, source s, files f, location l,
-         dsc_files df, suite su, src_associations sa, files f2, location l2
-    WHERE su.suite_name = 'stable' AND sa.suite = su.id AND sa.source = s.id
-      AND f2.id = s.file AND f2.location = l2.id AND df.source = s.id
-      AND f.id = df.file AND f.location = l.id AND o.package = s.source
-      AND sec.id = o.section AND NOT (f.filename ~ '^potato/') AND o.suite = su.id
-      AND NOT EXISTS (SELECT l.path FROM location l WHERE l.component IS NOT NULL AND f.location = l.id);
-""");
+""" % (codename));
+# Only needed if you have files in legacy-mixed locations
+#  UNION SELECT DISTINCT ON (f.id) null, sec.section, l.path, f.filename, f.id
+#      FROM component c, override o, section sec, source s, files f, location l,
+#           dsc_files df, suite su, src_associations sa, files f2, location l2
+#      WHERE su.suite_name = 'stable' AND sa.suite = su.id AND sa.source = s.id
+#        AND f2.id = s.file AND f2.location = l2.id AND df.source = s.id
+#        AND f.id = df.file AND f.location = l.id AND o.package = s.source
+#        AND sec.id = o.section AND NOT (f.filename ~ '^%s/') AND o.suite = su.id
+#        AND NOT EXISTS (SELECT l.path FROM location l WHERE l.component IS NOT NULL AND f.location = l.id);
     for i in q.getresult():
-        src = i[2]+i[3]
         (component, section) = fix_component_section(i[0], i[1]);
-        dest = "%sdists/%s/%s/source/%s%s" % (Cnf["Dir::RootDir"], Cnf.get("Suite::Stable::CodeName", "stable"), component, section, os.path.basename(i[3]));
-        src = clean_symlink(src, dest, Cnf["Dir::RootDir"]);
+        if Cnf.FindB("Dinstall::LegacyStableHasNoSections"):
+            section="";
+        dest = "%sdists/%s/%s/source/%s%s" % (Cnf["Dir::Root"], codename, component, section, os.path.basename(i[3]));
         if not os.path.exists(dest):
+           src = i[2]+i[3];
+           src = clean_symlink(src, dest, Cnf["Dir::Root"]);
             if Cnf.Find("Claire::Options::Verbose"):
                 print src+' -> '+dest
             os.symlink(src, dest);
         dislocated_files[i[4]] = dest;
 
     # Binary
-    architectures = Cnf.SubTree("Suite::Stable::Architectures").List();
-    for arch in [ "source", "all" ]:
-        if architectures.count(arch):
-            architectures.remove(arch);
+    architectures = filter(utils.real_arch, Cnf.ValueList("Suite::Stable::Architectures"));
     q = projectB.query("""
 SELECT DISTINCT ON (f.id) c.name, a.arch_string, sec.section, b.package,
                           b.version, l.path, f.filename, f.id
@@ -124,36 +124,39 @@ SELECT DISTINCT ON (f.id) c.name, a.arch_string, sec.section, b.package,
          location l, override o, section sec, suite su
     WHERE su.suite_name = 'stable' AND ba.suite = su.id AND ba.bin = b.id
       AND f.id = b.file AND f.location = l.id AND o.package = b.package
-      AND sec.id = o.section AND NOT (f.filename ~ '^potato/')
-      AND b.architecture = a.id AND l.component = c.id AND o.suite = su.id
-UNION SELECT DISTINCT ON (f.id) null, a.arch_string, sec.section, b.package,
-                          b.version, l.path, f.filename, f.id
-    FROM architecture a, bin_associations ba, binaries b, component c, files f,
-         location l, override o, section sec, suite su
-    WHERE su.suite_name = 'stable' AND ba.suite = su.id AND ba.bin = b.id
-      AND f.id = b.file AND f.location = l.id AND o.package = b.package
-      AND sec.id = o.section AND NOT (f.filename ~ '^potato/')
-      AND b.architecture = a.id AND o.suite = su.id AND NOT EXISTS
-        (SELECT l.path FROM location l WHERE l.component IS NOT NULL AND f.location = l.id);
-""");
+      AND sec.id = o.section AND NOT (f.filename ~ '^%s/')
+      AND b.architecture = a.id AND l.component = c.id AND o.suite = su.id""" %
+                       (codename));
+# Only needed if you have files in legacy-mixed locations
+#  UNION SELECT DISTINCT ON (f.id) null, a.arch_string, sec.section, b.package,
+#                            b.version, l.path, f.filename, f.id
+#      FROM architecture a, bin_associations ba, binaries b, component c, files f,
+#           location l, override o, section sec, suite su
+#      WHERE su.suite_name = 'stable' AND ba.suite = su.id AND ba.bin = b.id
+#        AND f.id = b.file AND f.location = l.id AND o.package = b.package
+#        AND sec.id = o.section AND NOT (f.filename ~ '^%s/')
+#        AND b.architecture = a.id AND o.suite = su.id AND NOT EXISTS
+#          (SELECT l.path FROM location l WHERE l.component IS NOT NULL AND f.location = l.id);
     for i in q.getresult():
         (component, section) = fix_component_section(i[0], i[2]);
+        if Cnf.FindB("Dinstall::LegacyStableHasNoSections"):
+            section="";
         architecture = i[1];
-        package = i[3]
+        package = i[3];
         version = utils.re_no_epoch.sub('', i[4]);
-        src = i[5]+i[6]
+        src = i[5]+i[6];
 
-        dest = "%sdists/%s/%s/binary-%s/%s%s_%s.deb" % (Cnf["Dir::RootDir"], Cnf.get("Suite::Stable::CodeName", "stable"), component, architecture, section, package, version);
-        src = clean_symlink(src, dest, Cnf["Dir::RootDir"]);
+        dest = "%sdists/%s/%s/binary-%s/%s%s_%s.deb" % (Cnf["Dir::Root"], codename, component, architecture, section, package, version);
+        src = clean_symlink(src, dest, Cnf["Dir::Root"]);
         if not os.path.exists(dest):
             if Cnf.Find("Claire::Options::Verbose"):
-                print src+' -> '+dest
+                print src+' -> '+dest;
             os.symlink(src, dest);
         dislocated_files[i[7]] = dest;
         # Add per-arch symlinks for arch: all debs
         if architecture == "all":
             for arch in architectures:
-                dest = "%sdists/%s/%s/binary-%s/%s%s_%s.deb" % (Cnf["Dir::RootDir"], Cnf.get("Suite::Stable::CodeName", "stable"), component, arch, section, package, version);
+                dest = "%sdists/%s/%s/binary-%s/%s%s_%s.deb" % (Cnf["Dir::Root"], codename, component, arch, section, package, version);
                 if not os.path.exists(dest):
                     if Cnf.Find("Claire::Options::Verbose"):
                         print src+' -> '+dest
@@ -167,7 +170,6 @@ def main ():
     global Cnf, projectB;
 
     Cnf = utils.get_conf()
-    apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
 
     Arguments = [('h',"help","Claire::Options::Help"),
                  ('v',"verbose","Claire::Options::Verbose")];
@@ -190,5 +192,5 @@ def main ():
 #######################################################################################
 
 if __name__ == '__main__':
-    main()
+    main();