import shutil
import subprocess
from sqlalchemy.orm.exc import NoResultFound
+import sqlalchemy.exc
import tempfile
import traceback
Will not give an error when the file is already present.
@rtype: L{daklib.dbconn.PoolFile}
- @return: batabase object for the new file
+ @return: database object for the new file
"""
session = self.session
db_source.suites.append(suite)
if not created:
+ for f in db_source.srcfiles:
+ self._copy_file(f.poolfile, archive, component, allow_tainted=allow_tainted)
return db_source
### Now add remaining files and copy them to the archive.
continue
fs.copy(src, dst, mode=0o640)
- source = self.changes.source
+ source = None
+ try:
+ source = self.changes.source
+ except Exception:
+ # Do not raise an exception here if the .dsc is invalid.
+ pass
+
if source is not None:
for f in source.files.itervalues():
src = os.path.join(self.original_directory, f.filename)
if src == suite_name:
suite_name = dst
if rtype != "silent-map":
- self.warnings.append('Mapping {0} to {0}.'.format(src, dst))
+ self.warnings.append('Mapping {0} to {1}.'.format(src, dst))
elif rtype == "ignore":
ignored = fields[1]
if suite_name == ignored:
@return: C{True} if the upload is NEW, C{False} otherwise
"""
session = self.session
+ new = False
# Check for missing overrides
for b in self.changes.binaries:
override = self._binary_override(suite, b)
if override is None:
- return True
+ self.warnings.append('binary:{0} is NEW.'.format(b.control['Package']))
+ new = True
if self.changes.source is not None:
override = self._source_override(suite, self.changes.source)
if override is None:
- return True
+ self.warnings.append('source:{0} is NEW.'.format(self.changes.source.dsc['Source']))
+ new = True
# Check if we reference a file only in a tainted archive
files = self.changes.files.values()
in_untainted_archive = (query_untainted.first() is not None)
if in_archive and not in_untainted_archive:
- return True
+ self.warnings.append('{0} is only available in NEW.'.format(f.filename))
+ new = True
+
+ return new
def _final_suites(self):
session = self.session
if suite.overridesuite is not None:
suite = self.session.query(Suite).filter_by(suite_name=suite.overridesuite).one()
+ mapped_component = get_mapped_component(binary.component)
+ if mapped_component is None:
+ return None
+
query = self.session.query(Override).filter_by(suite=suite, package=binary.control['Package']) \
- .join(Component).filter(Component.component_name == binary.component) \
+ .join(Component).filter(Component.component_name == mapped_component.component_name) \
.join(OverrideType).filter(OverrideType.overridetype == binary.type)
try:
db_changes.changelog_id = changelog_id
db_changes.closes = self.changes.closed_bugs
- self.transaction.session.add(db_changes)
- self.transaction.session.flush()
+ try:
+ self.transaction.session.add(db_changes)
+ self.transaction.session.flush()
+ except sqlalchemy.exc.IntegrityError:
+ raise ArchiveException('{0} is already known.'.format(self.changes.filename))
return db_changes
remaining.append(f)
continue
- if rule['Source'] != control['Source'] or rule['Section'] != f.section or rule['Extension'] != ext:
+ if rule['Source'] != self.changes.source_name or rule['Section'] != f.section or rule['Extension'] != ext:
remaining.append(f)
continue
if policy_queue is not None:
redirected_suite = policy_queue.suite
- source_suites = self.session.query(Suite).filter(Suite.suite_id.in_([suite.suite_id, redirected_suite.suite_id])).subquery()
+ # source can be in the suite we install to or any suite we enhance
+ source_suite_ids = set([suite.suite_id, redirected_suite.suite_id])
+ for enhanced_suite_id, in self.session.query(VersionCheck.reference_id) \
+ .filter(VersionCheck.suite_id.in_(source_suite_ids)) \
+ .filter(VersionCheck.check == 'Enhances'):
+ source_suite_ids.add(enhanced_suite_id)
+
+ source_suites = self.session.query(Suite).filter(Suite.suite_id.in_(source_suite_ids)).subquery()
source_component_func = lambda source: self._source_override(overridesuite, source).component
binary_component_func = lambda binary: self._binary_component(overridesuite, binary)