Browse code

add more --delete-after to sync variations

Matt Domsch authored on 2012/02/28 01:31:06
Showing 1 changed files
... ...
@@ -581,18 +581,18 @@ 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
-
595 584
 def cmd_sync_remote2remote(args):
585
+    def _do_deletes(s3, dst_list):
586
+        # Delete items in destination that are not in source
587
+        if cfg.dry_run:
588
+            for key in dst_list:
589
+                output(u"delete: %s" % dst_list[key]['object_uri_str'])
590
+        else:
591
+            for key in dst_list:
592
+                uri = S3Uri(dst_list[key]['object_uri_str'])
593
+                s3.object_delete(uri)
594
+                output(u"deleted: '%s'" % uri)
595
+
596 596
     s3 = S3(Config())
597 597
 
598 598
     # Normalise s3://uri (e.g. assert trailing slash)
... ...
@@ -633,7 +633,7 @@ def cmd_sync_remote2remote(args):
633 633
 
634 634
     # Delete items in destination that are not in source
635 635
     if cfg.delete_removed and not cfg.delete_after:
636
-        do_deletes(s3, dst_list)
636
+        _do_deletes(s3, dst_list)
637 637
 
638 638
     # Perform the synchronization of files
639 639
     timestamp_start = time.time()
... ...
@@ -661,7 +661,7 @@ def cmd_sync_remote2remote(args):
661 661
 
662 662
     # Delete items in destination that are not in source
663 663
     if cfg.delete_removed and cfg.delete_after:
664
-        do_deletes(s3, dst_list)
664
+        _do_deletes(s3, dst_list)
665 665
 
666 666
 def cmd_sync_remote2local(args):
667 667
     def _parse_attrs_header(attrs_header):
... ...
@@ -671,6 +671,11 @@ def cmd_sync_remote2local(args):
671 671
             attrs[key] = val
672 672
         return attrs
673 673
 
674
+    def _do_deletes(local_list):
675
+        for key in local_list:
676
+            os.unlink(local_list[key]['full_name'])
677
+            output(u"deleted: %s" % local_list[key]['full_name_unicode'])
678
+
674 679
     s3 = S3(Config())
675 680
 
676 681
     destination_base = args[-1]
... ...
@@ -717,10 +722,8 @@ def cmd_sync_remote2local(args):
717 717
         warning(u"Exitting now because of --dry-run")
718 718
         return
719 719
 
720
-    if cfg.delete_removed:
721
-        for key in local_list:
722
-            os.unlink(local_list[key]['full_name'])
723
-            output(u"deleted: %s" % local_list[key]['full_name_unicode'])
720
+    if cfg.delete_removed and not cfg.delete_after:
721
+        _do_deletes(local_list)
724 722
 
725 723
     total_size = 0
726 724
     total_elapsed = 0.0
... ...
@@ -812,6 +815,9 @@ def cmd_sync_remote2local(args):
812 812
     else:
813 813
         info(outstr)
814 814
 
815
+    if cfg.delete_removed and cfg.delete_after:
816
+        _do_deletes(local_list)
817
+
815 818
 def cmd_sync_local2remote(args):
816 819
     def _build_attr_header(src):
817 820
         import pwd, grp
... ...
@@ -843,6 +849,12 @@ def cmd_sync_local2remote(args):
843 843
         for k in attrs: result += "%s:%s/" % (k, attrs[k])
844 844
         return { 'x-amz-meta-s3cmd-attrs' : result[:-1] }
845 845
 
846
+    def _do_deletes(s3, remote_list):
847
+        for key in remote_list:
848
+            uri = S3Uri(remote_list[key]['object_uri_str'])
849
+            s3.object_delete(uri)
850
+            output(u"deleted: '%s'" % uri)
851
+
846 852
     s3 = S3(cfg)
847 853
 
848 854
     if cfg.encrypt:
... ...
@@ -902,11 +914,8 @@ def cmd_sync_local2remote(args):
902 902
         warning(u"Exitting now because of --dry-run")
903 903
         return
904 904
 
905
-    if cfg.delete_removed:
906
-        for key in remote_list:
907
-            uri = S3Uri(remote_list[key]['object_uri_str'])
908
-            s3.object_delete(uri)
909
-            output(u"deleted: '%s'" % uri)
905
+    if cfg.delete_removed and not cfg.delete_after:
906
+        _do_deletes(s3, remote_list)
910 907
 
911 908
     uploaded_objects_list = []
912 909
     total_size = 0
... ...
@@ -954,6 +963,9 @@ def cmd_sync_local2remote(args):
954 954
     else:
955 955
         info(outstr)
956 956
 
957
+    if cfg.delete_removed and cfg.delete_after:
958
+        _do_deletes(s3, remote_list)
959
+
957 960
     if cfg.invalidate_on_cf:
958 961
         if len(uploaded_objects_list) == 0:
959 962
             info("Nothing to invalidate in CloudFront")