Browse code

fixed to conform to test suite

Mike Klaas authored on 2015/06/24 08:26:48
Showing 1 changed files
... ...
@@ -599,6 +599,8 @@ def cmd_object_del(args):
599 599
 
600 600
         if not recursive:
601 601
             rc = subcmd_object_del_uri(uri_str)
602
+        elif Config.exclude:
603
+            rc = subcmd_batch_del(uri_str = uri_str)
602 604
         else:
603 605
             rc = subcmd_batch_del_iterative(uri_str = uri_str)
604 606
         if not rc:
... ...
@@ -606,7 +608,15 @@ def cmd_object_del(args):
606 606
     return EX_OK
607 607
 
608 608
 def subcmd_batch_del_iterative(uri_str = None, bucket = None):
609
-    """ Streaming version of batch deletion (doesn't realize whole list in memory before deleting) """
609
+    """ Streaming version of batch deletion (doesn't realize whole list in memory before deleting). 
610
+
611
+    Differences from subcmd_batch_del:
612
+      - Obeys cfg.max_delete, but if it is >1000, will delete files until we are sure that at least 
613
+        that many files are to be deleted
614
+      - Only prints out individual file names if <1000 files are to be deleted
615
+      - Does not obey --exclude directives (use subcmd_batch_del in those cases)
616
+
617
+    """
610 618
     if bucket and uri_str:
611 619
         raise ValueError("Pass only one of uri_str or bucket")
612 620
     if bucket: # bucket specified
... ...
@@ -632,19 +642,35 @@ def subcmd_batch_del_iterative(uri_str = None, bucket = None):
632 632
         to_delete[:] = []
633 633
         _status()
634 634
 
635
+    def _check_max_delete():
636
+        """ Return True if ok to delete """
637
+        if cfg.max_delete > 0 and len(to_delete) + deleted[0] > cfg.max_delete:
638
+            warning(u"delete: maximum requested number of deletes would be exceeded, %s performed." % deleted[0])
639
+            to_delete[:] = []
640
+            return False
641
+        return True
642
+
643
+    deleted_at_least_1000 = False
635 644
     for is_dir, obj in recurse(s3, uri, recursive=True):
636 645
         if is_dir:
637 646
             continue
638 647
         to_delete.append(obj)
639 648
         if len(to_delete) >= 1000:
640
-            if cfg.max_delete > 0 and len(to_delete) + deleted[0] > cfg.max_delete:
641
-                warning(u"delete: maximum requested number of deletes would be exceeded, %s performed." % deleted[0])
642
-                to_delete[:] = []
643
-                break
644
-            _delete()
649
+            if _check_max_delete():
650
+                deleted_at_least_1000 = True
651
+                _delete()
652
+            else:
653
+                return False
645 654
 
646 655
     if to_delete:
647
-        _delete()
656
+        if _check_max_delete():
657
+            if not deleted_at_least_1000:
658
+                output('\n'.join(u"File %s deleted" % uri.compose_uri(bucket, p['Key']) for p in to_delete))
659
+            _delete()
660
+        else:
661
+            return False
662
+
663
+    return EX_OK
648 664
 
649 665
 def subcmd_batch_del(uri_str = None, bucket = None, remote_list = None):
650 666
     """