| 
					
				 | 
			
			
				@@ -8,8 +8,9 @@ from ..hashindex import NSIndex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from ..helpers import Location, IntegrityError 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from ..locking import Lock, LockFailed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from ..remote import RemoteRepository, InvalidRPCMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from ..repository import Repository, LoggedIO, TAG_COMMIT, MAX_DATA_SIZE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from ..repository import Repository, LoggedIO, TAG_DELETE, MAX_DATA_SIZE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from . import BaseTestCase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from .hashindex import H 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 UNSPECIFIED = object()  # for default values where we can't use None 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -227,6 +228,28 @@ class RepositoryCommitTestCase(RepositoryTestCaseBase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             io = self.repository.io 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             assert not io.is_committed_segment(io.get_latest_segment()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_moved_deletes_are_tracked(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(H(1), b'1') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(H(2), b'2') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.delete(H(1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        last_segment = self.repository.io.get_latest_segment() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        num_deletes = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for tag, key, offset, data in self.repository.io.iter_objects(last_segment, include_data=True): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if tag == TAG_DELETE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                assert key == H(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                num_deletes += 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert num_deletes == 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert last_segment in self.repository.compact 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(H(3), b'3') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert last_segment not in self.repository.compact 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assert not self.repository.io.segment_exists(last_segment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        last_segment = self.repository.io.get_latest_segment() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for tag, key, offset in self.repository.io.iter_objects(last_segment): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assert tag != TAG_DELETE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class RepositoryAppendOnlyTestCase(RepositoryTestCaseBase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def open(self, create=False): 
			 |