[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] dak/export.py, daklib/policy.py: ignore existing files



The same upstream tarball can be used by multiple uploads so we have to
ignore already existing files.
---
 dak/export.py    |    2 +-
 daklib/policy.py |   18 +++++++++++++-----
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/dak/export.py b/dak/export.py
index 8545167..841e336 100644
--- a/dak/export.py
+++ b/dak/export.py
@@ -69,7 +69,7 @@ def main(argv=None):
 
     for u in uploads:
         print "Processing {0}...".format(u.changes.changesname)
-        UploadCopy(u).export(directory, symlink=symlink)
+        UploadCopy(u).export(directory, symlink=symlink, ignore_existing=True)
 
 if __name__ == '__main__':
     main()
diff --git a/daklib/policy.py b/daklib/policy.py
index eef18a4..cfb0e1d 100644
--- a/daklib/policy.py
+++ b/daklib/policy.py
@@ -49,7 +49,7 @@ class UploadCopy(object):
         self.directory = None
         self.upload = upload
 
-    def export(self, directory, mode=None, symlink=True):
+    def export(self, directory, mode=None, symlink=True, ignore_existing=False):
         """export a copy of the upload
 
         @type  directory: str
@@ -60,6 +60,9 @@ class UploadCopy(object):
 
         @type  symlink: bool
         @param symlink: use symlinks instead of copying the files
+
+        @type  ignore_existing: bool
+        @param ignore_existing: ignore already existing files
         """
         with FilesystemTransaction() as fs:
             source = self.upload.source
@@ -69,22 +72,27 @@ class UploadCopy(object):
                 for dsc_file in source.srcfiles:
                     f = dsc_file.poolfile
                     dst = os.path.join(directory, os.path.basename(f.filename))
-                    fs.copy(f.fullpath, dst, mode=mode, symlink=symlink)
+                    if not os.path.exists(dst) or not ignore_existing:
+                        fs.copy(f.fullpath, dst, mode=mode, symlink=symlink)
+
             for binary in self.upload.binaries:
                 f = binary.poolfile
                 dst = os.path.join(directory, os.path.basename(f.filename))
-                fs.copy(f.fullpath, dst, mode=mode, symlink=symlink)
+                if not os.path.exists(dst) or not ignore_existing:
+                    fs.copy(f.fullpath, dst, mode=mode, symlink=symlink)
 
             # copy byhand files
             for byhand in self.upload.byhand:
                 src = os.path.join(queue.path, byhand.filename)
                 dst = os.path.join(directory, byhand.filename)
-                fs.copy(src, dst, mode=mode, symlink=symlink)
+                if not os.path.exists(dst) or not ignore_existing:
+                    fs.copy(src, dst, mode=mode, symlink=symlink)
 
             # copy .changes
             src = os.path.join(queue.path, self.upload.changes.changesname)
             dst = os.path.join(directory, self.upload.changes.changesname)
-            fs.copy(src, dst, mode=mode, symlink=symlink)
+            if not os.path.exists(dst) or not ignore_existing:
+                fs.copy(src, dst, mode=mode, symlink=symlink)
 
     def __enter__(self):
         assert self.directory is None
-- 
1.7.2.5



Reply to: