| 
					
				 | 
			
			
				@@ -210,6 +210,23 @@ class LocalRepositoryTestCase(RepositoryTestCaseBase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.repository.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         assert 0 not in [segment for segment, _ in self.repository.io.segment_iterator()] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_uncommitted_garbage(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # uncommitted garbage should be no problem, it is cleaned up automatically. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # we just have to be careful with invalidation of cached FDs in LoggedIO. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(H(0), b'foo') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # write some crap to a uncommitted segment file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        last_segment = self.repository.io.get_latest_segment() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        with open(self.repository.io.segment_filename(last_segment + 1), 'wb') as f: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            f.write(MAGIC + b'crapcrapcrap') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # usually, opening the repo and starting a transaction should trigger a cleanup. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository = self.open() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        with self.repository: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.repository.put(H(0), b'bar')  # this may trigger compact_segments() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.repository.commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # the point here is that nothing blows up with an exception. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class RepositoryCommitTestCase(RepositoryTestCaseBase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |