from multiprocessing import Pool
from sqlalchemy import desc, or_
+from sqlalchemy.exc import IntegrityError
from subprocess import Popen, PIPE, call
import os.path
where o.suite = :overridesuite and o.type = :type_id and o.section = s.id and
o.component = :component)
-select bc.file, substring(o.section from position('/' in o.section) + 1) || '/' || b.package as package
+select bc.file, o.section || '/' || b.package as package
from newest_binaries b, bin_contents bc, unique_override o
where b.id = bc.binary_id and o.package = b.package
order by bc.file, b.package'''
where o.suite = :overridesuite and o.type = :type_id and o.section = s.id
order by o.package, s.section, o.modified desc)
-select bc.file, substring(o.section from position('/' in o.section) + 1) || '/' || b.package as package
+select bc.file, o.section || '/' || b.package as package
from newest_binaries b, bin_contents bc, unique_override o
where b.id = bc.binary_id and o.package = b.package
order by bc.file, b.package'''
Write the output file.
'''
command = ['gzip', '--rsyncable']
- output_file = open(self.output_filename(), 'w')
+ final_filename = self.output_filename()
+ temp_filename = final_filename + '.new'
+ output_file = open(temp_filename, 'w')
gzip = Popen(command, stdin = PIPE, stdout = output_file)
gzip.stdin.write(self.get_header())
for item in self.fetch():
gzip.stdin.close()
output_file.close()
gzip.wait()
+ os.remove(final_filename)
+ os.rename(temp_filename, final_filename)
+ os.chmod(final_filename, 0664)
@classmethod
def write_all(class_, suite_names = [], force = False):
'''
session = DBConn().session()
binary = session.query(DBBinary).get(self.binary_id)
- for filename in binary.scan_contents():
+ fileset = set(binary.scan_contents())
+ if len(fileset) == 0:
+ fileset.add('EMPTY_PACKAGE')
+ for filename in fileset:
binary.contents.append(BinContents(file = filename))
session.commit()
session.close()