for p in q.fetchall():
current[p[0]] = p[1]
for p in packages.keys():
- p = p.split()
if p[2] == "source":
old[p[0]] = p[1]
FROM binaries b, bin_associations ba, architecture a
WHERE ba.suite = :suiteid
AND ba.bin = b.id AND b.architecture = a.id""", {'suiteid': suite_id})
- for i in q.fetchall():
- key = " ".join(i[:3])
+ for i in q:
+ key = i[:3]
current[key] = i[3]
- q = session.execute("""SELECT s.source, s.version, sa.id
+ q = session.execute("""SELECT s.source, s.version, 'source', sa.id
FROM source s, src_associations sa
WHERE sa.suite = :suiteid
AND sa.source = s.id""", {'suiteid': suite_id})
- for i in q.fetchall():
- key = " ".join(i[:2]) + " source"
- current[key] = i[2]
+ for i in q:
+ key = i[:3]
+ current[key] = i[3]
# Build up a dictionary of what should be in the suite
- desired = {}
+ desired = set()
for line in lines:
split_line = line.strip().split()
if len(split_line) != 3:
utils.warn("'%s' does not break into 'package version architecture'." % (line[:-1]))
continue
- 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) = key.split()
- pkid = current[key]
- if architecture == "source":
- session.execute("""DELETE FROM src_associations WHERE id = :pkid""", {'pkid': pkid})
- else:
- session.execute("""DELETE FROM bin_associations WHERE id = :pkid""", {'pkid': pkid})
- Logger.log(["removed", key, pkid])
+ desired.add(tuple(split_line))
# Check to see which packages need added and add them
- for key in sorted(desired.keys(), cmp=cmp_package_version):
- if not current.has_key(key):
- (package, version, architecture) = key.split()
+ for key in sorted(desired, cmp=cmp_package_version):
+ if key not in current:
+ (package, version, architecture) = key
version_checks(package, architecture, suite.suite_name, version, session, force)
pkid = get_id (package, version, architecture, session)
if not pkid:
else:
session.execute("""INSERT INTO bin_associations (suite, bin)
VALUES (:suiteid, :pkid)""", {'suiteid': suite_id, 'pkid': pkid})
- Logger.log(["added", key, pkid])
+ Logger.log(["added", " ".join(key), pkid])
+
+ # Check to see which packages need removed and remove them
+ for key, pkid in current.iteritems():
+ if key not in desired:
+ (package, version, architecture) = key
+ if architecture == "source":
+ session.execute("""DELETE FROM src_associations WHERE id = :pkid""", {'pkid': pkid})
+ else:
+ session.execute("""DELETE FROM bin_associations WHERE id = :pkid""", {'pkid': pkid})
+ Logger.log(["removed", " ".join(key), pkid])
session.commit()
session.execute("""INSERT INTO src_associations (suite, source)
VALUES (:suiteid, :pkid)""",
{'suiteid': suite_id, 'pkid': pkid})
+ Logger.log(["added", package, version, architecture, suite.suite_name, pkid])
+
elif action == "remove":
if association_id == None:
utils.warn("'%s_%s_%s' doesn't exist in suite %s." % (package, version, architecture, suite))
continue
else:
session.execute("""DELETE FROM src_associations WHERE id = :pkid""", {'pkid': association_id})
+ Logger.log(["removed", package, version, architecture, suite.suite_name, pkid])
else:
# Find the existing associations ID, if any
q = session.execute("""SELECT id FROM bin_associations
session.execute("""INSERT INTO bin_associations (suite, bin)
VALUES (:suiteid, :pkid)""",
{'suiteid': suite_id, 'pkid': pkid})
+ Logger.log(["added", package, version, architecture, suite.suite_name, pkid])
elif action == "remove":
if association_id == None:
utils.warn("'%s_%s_%s' doesn't exist in suite %s." % (package, version, architecture, suite))
continue
else:
session.execute("""DELETE FROM bin_associations WHERE id = :pkid""", {'pkid': association_id})
+ Logger.log(["removed", package, version, architecture, suite.suite_name, pkid])
session.commit()
try:
file_list = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv);
- except SystemError, e:
+ except SystemError as e:
print "%s\n" % e
usage(1)
Options = cnf.SubTree("Control-Suite::Options")
utils.fubar("Can only perform one action at a time.")
action = i
+ # Safety/Sanity check
+ if action == "set" and (not suite.allowcsset):
+ if force:
+ utils.warn("Would not normally allow setting suite %s (allowsetcs is FALSE), but --force used" % (suite_name))
+ else:
+ utils.fubar("Will not reset suite %s due to its database configuration (allowsetcs is FALSE)" % (suite_name))
+
# Need an action...
if action == None:
utils.fubar("No action specified.")
- # Safety/Sanity check
- # XXX: This should be stored in the database
- if action == "set" and suite_name not in ["testing", "squeeze-updates"]:
- utils.fubar("Will not reset suite %s" % (suite_name))
-
britney = False
if action == "set" and cnf["Control-Suite::Options::Britney"]:
britney = True