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)
- empty_package = True
- 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))
- empty_package = False
- if empty_package:
- binary.contents.append(BinContents(file = 'EMPTY_PACKAGE'))
- try:
- session.commit()
- except IntegrityError:
- session.rollback()
- binary.contents.append(BinContents(file = 'DUPLICATE_FILENAMES'))
- session.commit()
+ session.commit()
session.close()
@classmethod