]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/contents.py
Merge branch 'dbtests'
[dak.git] / daklib / contents.py
index 4a6330f827fdd349306890f14a09196af457ac8d..27ffdda6cf71879c75abd34b01ee98d3b2fe796c 100755 (executable)
@@ -191,7 +191,9 @@ select bc.file, o.section || '/' || b.package as 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():
@@ -199,6 +201,9 @@ select bc.file, o.section || '/' || b.package as package
         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):
@@ -252,18 +257,12 @@ class ContentsScanner(object):
         '''
         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