Browse code

add --delete-after option for sync

Matt Domsch authored on 2012/02/28 01:13:22
Showing 2 changed files
... ...
@@ -581,6 +581,17 @@ def cmd_info(args):
581 581
             else:
582 582
                 raise
583 583
 
584
+def do_deletes(s3, dst_list):
585
+    # Delete items in destination that are not in source
586
+    if cfg.dry_run:
587
+        for key in dst_list:
588
+            output(u"delete: %s" % dst_list[key]['object_uri_str'])
589
+    else:
590
+        for key in dst_list:
591
+            uri = S3Uri(dst_list[key]['object_uri_str'])
592
+            s3.object_delete(uri)
593
+            output(u"deleted: '%s'" % uri)
594
+
584 595
 def cmd_sync_remote2remote(args):
585 596
     s3 = S3(Config())
586 597
 
... ...
@@ -621,15 +632,8 @@ def cmd_sync_remote2remote(args):
621 621
         return
622 622
 
623 623
     # Delete items in destination that are not in source
624
-    if cfg.delete_removed:
625
-        if cfg.dry_run:
626
-            for key in dst_list:
627
-                output(u"delete: %s" % dst_list[key]['object_uri_str'])
628
-        else:
629
-            for key in dst_list:
630
-                uri = S3Uri(dst_list[key]['object_uri_str'])
631
-                s3.object_delete(uri)
632
-                output(u"deleted: '%s'" % uri)
624
+    if cfg.delete_removed and not cfg.delete_after:
625
+        do_deletes(s3, dst_list)
633 626
 
634 627
     # Perform the synchronization of files
635 628
     timestamp_start = time.time()
... ...
@@ -655,6 +659,10 @@ def cmd_sync_remote2remote(args):
655 655
     else:
656 656
         info(outstr)
657 657
 
658
+    # Delete items in destination that are not in source
659
+    if cfg.delete_removed and cfg.delete_after:
660
+        do_deletes(s3, dst_list)
661
+
658 662
 def cmd_sync_remote2local(args):
659 663
     def _parse_attrs_header(attrs_header):
660 664
         attrs = {}
... ...
@@ -1499,6 +1507,7 @@ def main():
1499 1499
 
1500 1500
     optparser.add_option(      "--delete-removed", dest="delete_removed", action="store_true", help="Delete remote objects with no corresponding local file [sync]")
1501 1501
     optparser.add_option(      "--no-delete-removed", dest="delete_removed", action="store_false", help="Don't delete remote objects.")
1502
+    optparser.add_option(      "--delete-after", dest="delete_after", action="store_true", help="Perform deletes after new uploads [sync]")
1502 1503
     optparser.add_option("-p", "--preserve", dest="preserve_attrs", action="store_true", help="Preserve filesystem attributes (mode, ownership, timestamps). Default for [sync] command.")
1503 1504
     optparser.add_option(      "--no-preserve", dest="preserve_attrs", action="store_false", help="Don't store FS attributes")
1504 1505
     optparser.add_option(      "--exclude", dest="exclude", action="append", metavar="GLOB", help="Filenames and paths matching GLOB will be excluded from sync")
... ...
@@ -186,6 +186,9 @@ Delete remote objects with no corresponding local file
186 186
 \fB\-\-no\-delete\-removed\fR
187 187
 Don't delete remote objects.
188 188
 .TP
189
+\fB\-\-delete\-after\fR
190
+Perform deletes after new uploads [sync].
191
+.TP
189 192
 \fB\-p\fR, \fB\-\-preserve\fR
190 193
 Preserve filesystem attributes (mode, ownership,
191 194
 timestamps). Default for [sync] command.