#!/usr/bin/env python
# Manipulate suite tags
-# Copyright (C) 2000, 2001 James Troup <james@nocrew.org>
-# $Id: heidi,v 1.10 2001-11-04 22:40:12 troup Exp $
+# Copyright (C) 2000, 2001, 2002, 2003, 2004 James Troup <james@nocrew.org>
+# $Id: heidi,v 1.18 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
#######################################################################################
-import os, pg, string, sys;
+import pg, sys;
import apt_pkg;
import utils, db_access, logging;
Display or alter the contents of a suite using FILE(s), or stdin.
-a, --add=SUITE add to SUITE
+ -h, --help show this help and exit
-l, --list=SUITE list the contents of SUITE
-r, --remove=SUITE remove from SUITE
- -s, --set=SUITE set SUITE
- -h, --help show this help and exit"""
+ -s, --set=SUITE set SUITE"""
sys.exit(exit_code)
q = projectB.query("SELECT b.package, b.version, a.arch_string, ba.id FROM binaries b, bin_associations ba, architecture a WHERE ba.suite = %s AND ba.bin = b.id AND b.architecture = a.id" % (suite_id));
ql = q.getresult();
for i in ql:
- key = string.join(i[:3]);
+ key = " ".join(i[:3]);
current[key] = i[3];
q = projectB.query("SELECT s.source, s.version, sa.id FROM source s, src_associations sa WHERE sa.suite = %s AND sa.source = s.id" % (suite_id));
ql = q.getresult();
for i in ql:
- key = string.join(i[:2]) + " source";
+ key = " ".join(i[:2]) + " source";
current[key] = i[2];
# Build up a dictionary of what should be in the suite
desired = {};
for line in lines:
- split_line = string.split(string.strip(line[:-1]));
+ split_line = line.strip().split();
if len(split_line) != 3:
utils.warn("'%s' does not break into 'package version architecture'." % (line[:-1]));
continue;
- key = string.join(split_line);
+ key = " ".join(split_line);
desired[key] = "";
# Check to see which packages need removed and remove them
for key in current.keys():
if not desired.has_key(key):
- (package, version, architecture) = string.split(key);
+ (package, version, architecture) = key.split();
id = current[key];
if architecture == "source":
q = projectB.query("DELETE FROM src_associations WHERE id = %s" % (id));
# Check to see which packages need added and add them
for key in desired.keys():
if not current.has_key(key):
- (package, version, architecture) = string.split(key);
+ (package, version, architecture) = key.split();
id = get_id (package, version, architecture);
if not id:
continue;
projectB.query("BEGIN WORK");
for line in lines:
- split_line = string.split(string.strip(line[:-1]));
+ split_line = line.strip().split();
if len(split_line) != 3:
utils.warn("'%s' does not break into 'package version architecture'." % (line[:-1]));
continue;
assoication_id = ql[0][0];
# Take action
if action == "add":
- if assoication_id != None:
+ if assoication_id:
utils.warn("'%s~%s~%s' already exists in suite %s." % (package, version, architecture, suite));
continue;
else:
assoication_id = ql[0][0];
# Take action
if action == "add":
- if assoication_id != None:
+ if assoication_id:
utils.warn("'%s~%s~%s' already exists in suite %s." % (package, version, architecture, suite));
continue;
else:
q = projectB.query("SELECT b.package, b.version, a.arch_string FROM binaries b, bin_associations ba, architecture a WHERE ba.suite = %s AND ba.bin = b.id AND b.architecture = a.id" % (suite_id));
ql = q.getresult();
for i in ql:
- print string.join(i);
+ print " ".join(i);
# List source
q = projectB.query("SELECT s.source, s.version FROM source s, src_associations sa WHERE sa.suite = %s AND sa.source = s.id" % (suite_id));
ql = q.getresult();
for i in ql:
- print string.join(i) + " source";
+ print " ".join(i) + " source";
#######################################################################################
def main ():
global Cnf, projectB, Logger;
- apt_pkg.init();
-
- Cnf = apt_pkg.newConfiguration();
- apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
+ Cnf = utils.get_conf()
Arguments = [('a',"add","Heidi::Options::Add", "HasArg"),
('h',"help","Heidi::Options::Help"),
('s',"set", "Heidi::Options::Set", "HasArg")];
for i in ["add", "help", "list", "remove", "set", "version" ]:
- Cnf["Heidi::Options::%s" % (i)] = "";
+ if not Cnf.has_key("Heidi::Options::%s" % (i)):
+ Cnf["Heidi::Options::%s" % (i)] = "";
file_list = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv);
Options = Cnf.SubTree("Heidi::Options")
if not Cnf.has_key("Suite::%s" % (suite)):
utils.fubar("Unknown suite '%s'." %(suite));
else:
- if action != None:
+ if action:
utils.fubar("Can only perform one action at a time.");
action = i;
get_list(suite);
else:
Logger = logging.Logger(Cnf, "heidi");
- if file_list != []:
+ if file_list:
for file in file_list:
process_file(utils.open_file(file), suite, action);
else: