# '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.6 2001-03-20 00:28:11 troup Exp $
+# $Id: claire.py,v 1.9 2001-10-10 16:04:14 ajt 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
+################################################################################
+
# "Look around... leaves are brown... and the sky's a hazy shade of winter,
# Look around... leaves are brown... there's a patch of snow on the ground."
# -- Simon & Garfunkel / 'A Hazy Shade'
################################################################################
+def usage (exit_code=0):
+ print """Usage: claire [OPTIONS]
+Create compatability symlinks from legacy locations to the pool.
+
+ -v, --verbose explain what is being done
+ -h, --help show this help and exit"""
+
+ sys.exit(exit_code)
+
+################################################################################
+
# Relativize an absolute symlink from 'src' -> 'dest' relative to 'root'.
# Returns fixed 'src'
def clean_symlink (src, dest, root):
def fix_component_section (component, section):
if component == "":
- (None, component) = utils.extract_component_from_section(section);
+ component = utils.extract_component_from_section(section)[1];
# FIXME: ugly hacks to work around override brain damage
section = re_strip_section_prefix.sub('', section);
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 l.component = c.id
+ 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 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);
""");
for i in q.getresult():
os.symlink(src, dest);
dislocated_files[i[4]] = dest;
- #return dislocated_files;
-
- # TODO later when there's something to test it with!
# Binary
q = projectB.query("""
SELECT DISTINCT ON (f.id) c.name, a.arch_string, sec.section, b.package,
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 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,
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 NOT EXISTS
+ 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():
package = i[3]
version = utils.re_no_epoch.sub('', i[4]);
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"]);
if not os.path.exists(dest):
global Cnf, projectB;
apt_pkg.init();
-
+
Cnf = apt_pkg.newConfiguration();
apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
- Arguments = [('d',"debug","Claire::Options::Debug", "IntVal"),
- ('h',"help","Claire::Options::Help"),
- ('v',"verbose","Claire::Options::Verbose"),
- ('V',"version","Claire::Options::Version")];
+ Arguments = [('h',"help","Claire::Options::Help"),
+ ('v',"verbose","Claire::Options::Verbose")];
+ for i in ["help", "verbose" ]:
+ Cnf["Claire::Options::%s" % (i)] = "";
apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv);
+ Options = Cnf.SubTree("Claire::Options")
+
+ if Options["Help"]:
+ usage();
projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]));