X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Farchive.py;h=54f925a33f07d22e629a5c6edf50d83f925ce23d;hb=4c8642c5f820359eadb2775eb920ff08e91bbaaf;hp=29a5621d3a4fbf9409063fac5004f18fbab52671;hpb=129ee05ec943535f154032b73cca5f96c161540f;p=dak.git diff --git a/daklib/archive.py b/daklib/archive.py index 29a5621d..54f925a3 100644 --- a/daklib/archive.py +++ b/daklib/archive.py @@ -125,11 +125,10 @@ class ArchiveTransaction(object): @type fingerprint: L{daklib.dbconn.Fingerprint} @param fingerprint: optional fingerprint - @type source_suites: list of L{daklib.dbconn.Suite} or C{True} + @type source_suites: SQLAlchemy subquery for C{daklib.dbconn.Suite} or C{True} @param source_suites: suites to copy the source from if they are not in C{suite} or C{True} to allow copying from any suite. - This can also be a SQLAlchemy (sub)query object. @type extra_source_archives: list of L{daklib.dbconn.Archive} @param extra_source_archives: extra archives to copy Built-Using sources from @@ -625,6 +624,8 @@ class ArchiveUpload(object): for f in self.changes.files.itervalues(): src = os.path.join(self.original_directory, f.filename) dst = os.path.join(self.directory, f.filename) + if not os.path.exists(src): + continue fs.copy(src, dst) source = self.changes.source @@ -632,10 +633,15 @@ class ArchiveUpload(object): for f in source.files.itervalues(): src = os.path.join(self.original_directory, f.filename) dst = os.path.join(self.directory, f.filename) - if f.filename not in self.changes.files: - db_file = self.transaction.get_file(f, source.dsc['Source']) - db_archive_file = session.query(ArchiveFile).filter_by(file=db_file).first() - fs.copy(db_archive_file.path, dst, symlink=True) + if not os.path.exists(dst): + try: + db_file = self.transaction.get_file(f, source.dsc['Source']) + db_archive_file = session.query(ArchiveFile).filter_by(file=db_file).first() + fs.copy(db_archive_file.path, dst, symlink=True) + except KeyError: + # Ignore if get_file could not find it. Upload will + # probably be rejected later. + pass def unpacked_source(self): """Path to unpacked source @@ -701,29 +707,6 @@ class ArchiveUpload(object): 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. - - @todo: ansgar wants to get rid of this. It's currently only used for - the security archive - - @type component_name: str - @param component_name: component name - - @rtype: L{daklib.dbconn.Component} - @return: component after applying maps - """ - 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 @@ -846,7 +829,7 @@ class ArchiveUpload(object): return override.component if only_overrides: return None - return self._mapped_component(binary.component) + return get_mapped_component(binary.component, self.session) def check(self, force=False): """run checks against the upload @@ -929,7 +912,7 @@ class ArchiveUpload(object): changed_by = get_or_set_maintainer(control.get('Changed-By', control['Maintainer']), self.session) if source_suites is None: - source_suites = self.session.query(Suite).join((VersionCheck, VersionCheck.reference_id == Suite.suite_id)).filter(VersionCheck.suite == suite).subquery() + source_suites = self.session.query(Suite).join((VersionCheck, VersionCheck.reference_id == Suite.suite_id)).filter(VersionCheck.check == 'Enhances').filter(VersionCheck.suite == suite).subquery() source = self.changes.source if source is not None: @@ -1145,8 +1128,9 @@ class ArchiveUpload(object): # copy to build queues if policy_queue is None or policy_queue.send_to_build_queues: + source_suites = self.session.query(Suite).filter_by(suite_id=suite.suite_id).subquery() 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]) + self._install_to_suite(build_queue.suite, source_component_func, binary_component_func, source_suites=source_suites, extra_source_archives=[suite.archive]) self._do_bts_versiontracking()