if archive.tainted:
allow_tainted = True
- # make sure built-using packages are present in target archive
filename = db_binary.poolfile.filename
+
+ # make sure source is present in target archive
+ db_source = db_binary.source
+ if session.query(ArchiveFile).filter_by(archive=archive, file=db_source.poolfile).first() is None:
+ raise ArchiveException('{0}: cannot copy to {1}: source is not present in target archive'.format(filename, suite.suite_name))
+
+ # make sure built-using packages are present in target archive
for db_source in db_binary.extra_sources:
self._ensure_extra_source_exists(filename, db_source, archive, extra_archives=extra_archives)
suites = session.query(Suite).filter(Suite.suite_name.in_(suite_names))
return suites
+ def _mapped_component(self, component_name):
+ """get component after mappings
+
+ Evaluate component mappings from ComponentMappings in dak.conf for the
+ given component name.
+
+ NOTE: ansgar wants to get rid of this. It's currently only used for
+ the security archive
+
+ Args:
+ component_name (str): component name
+
+ Returns:
+ `daklib.dbconn.Component` object
+ """
+ cnf = Config()
+ for m in cnf.value_list("ComponentMappings"):
+ (src, dst) = m.split()
+ if component_name == src:
+ component_name = dst
+ component = self.session.query(Component).filter_by(component_name=component_name).one()
+ return component
+
def _check_new(self, suite):
"""Check if upload is NEW
except NoResultFound:
return None
+ def _binary_component(self, suite, binary, only_overrides=True):
+ """get component for a binary
+
+ By default this will only look at overrides to get the right component;
+ if `only_overrides` is False this method will also look at the Section field.
+
+ Args:
+ suite (daklib.dbconn.Suite)
+ binary (daklib.upload.Binary)
+
+ Kwargs:
+ only_overrides (bool): only use overrides to get the right component.
+ defaults to True.
+
+ Returns:
+ `daklib.dbconn.Component` object or None
+ """
+ override = self._binary_override(suite, binary)
+ if override is not None:
+ return override.component
+ if only_overrides:
+ return None
+ return self._mapped_component(binary.component)
+
def check(self, force=False):
"""run checks against the upload
for chk in (
checks.SignatureCheck,
checks.ChangesCheck,
+ checks.TransitionCheck,
+ checks.UploadBlockCheck,
checks.HashesCheck,
checks.SourceCheck,
checks.BinaryCheck,
+ checks.BinaryTimestampCheck,
checks.ACLCheck,
checks.SingleDistributionCheck,
checks.NoSourceOnlyCheck,
remaining = []
for f in byhand:
- package, version, archext = f.filename.split('_', 2)
+ parts = f.filename.split('_', 2)
+ if len(parts) != 3:
+ print "W: unexpected byhand filename {0}. No automatic processing.".format(f.filename)
+ remaining.append(f)
+ continue
+
+ package, version, archext = parts
arch, ext = archext.split('.', 1)
rule = automatic_byhand_packages.get(package)
print >>debinfo, line
debinfo.close()
+ def _policy_queue(self, suite):
+ if suite.policy_queue is not None:
+ return suite.policy_queue
+ return None
+
def install(self):
"""install upload
if suite.overridesuite is not None:
overridesuite = self.session.query(Suite).filter_by(suite_name=suite.overridesuite).one()
+ policy_queue = self._policy_queue(suite)
+
redirected_suite = suite
- if suite.policy_queue is not None:
- redirected_suite = suite.policy_queue.suite
+ if policy_queue is not None:
+ redirected_suite = policy_queue.suite
source_component_func = lambda source: self._source_override(overridesuite, source).component
- binary_component_func = lambda binary: self._binary_override(overridesuite, binary).component
+ binary_component_func = lambda binary: self._binary_component(overridesuite, binary)
(db_source, db_binaries) = self._install_to_suite(redirected_suite, source_component_func, binary_component_func, extra_source_archives=[suite.archive])
- if suite.policy_queue is not None:
- self._install_policy(suite.policy_queue, suite, db_changes, db_source, db_binaries)
+ if policy_queue is not None:
+ self._install_policy(policy_queue, suite, db_changes, db_source, db_binaries)
# copy to build queues
- if suite.policy_queue is None or suite.policy_queue.send_to_build_queues:
+ if policy_queue is None or policy_queue.send_to_build_queues:
for build_queue in suite.copy_queues:
self._install_to_suite(build_queue.suite, source_component_func, binary_component_func, extra_source_archives=[suite.archive])
suite = suites[0]
def binary_component_func(binary):
- override = self._binary_override(suite, binary)
- if override is not None:
- return override.component
- component_name = binary.component
- component = self.session.query(Component).filter_by(component_name=component_name).one()
- return component
+ return self._binary_component(suite, binary, only_overrides=False)
# guess source component
# XXX: should be moved into an extra method
component = binary_component_func(binary)
binary_component_names.add(component.component_name)
source_component_name = None
- for guess in ('main', 'contrib', 'non-free'):
+ for c in self.session.query(Component).order_by(Component.component_id):
+ guess = c.component_name
if guess in binary_component_names:
source_component_name = guess
break