| 
														
															@@ -178,10 +178,16 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         append_only=False, 
														 | 
														
														 | 
														
															         append_only=False, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         storage_quota=None, 
														 | 
														
														 | 
														
															         storage_quota=None, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         make_parent_dirs=False, 
														 | 
														
														 | 
														
															         make_parent_dirs=False, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        send_log_cb=None, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     ): 
														 | 
														
														 | 
														
															     ): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.path = os.path.abspath(path) 
														 | 
														
														 | 
														
															         self.path = os.path.abspath(path) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self._location = Location("file://%s" % self.path) 
														 | 
														
														 | 
														
															         self._location = Location("file://%s" % self.path) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.version = None 
														 | 
														
														 | 
														
															         self.version = None 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        # long-running repository methods which emit log or progress output are responsible for calling 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        # the ._send_log method periodically to get log and progress output transferred to the borg client 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        # in a timely manner, in case we have a RemoteRepository. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        # for local repositories ._send_log can be called also (it will just do nothing in that case). 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self._send_log = send_log_cb or (lambda: None) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.io = None  # type: LoggedIO 
														 | 
														
														 | 
														
															         self.io = None  # type: LoggedIO 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.lock = None 
														 | 
														
														 | 
														
															         self.lock = None 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.index = None 
														 | 
														
														 | 
														
															         self.index = None 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -785,6 +791,7 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 logger.warning("Segment %d not found, but listed in compaction data", segment) 
														 | 
														
														 | 
														
															                 logger.warning("Segment %d not found, but listed in compaction data", segment) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 del self.compact[segment] 
														 | 
														
														 | 
														
															                 del self.compact[segment] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 pi.show() 
														 | 
														
														 | 
														
															                 pi.show() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 continue 
														 | 
														
														 | 
														
															                 continue 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             segment_size = self.io.segment_size(segment) 
														 | 
														
														 | 
														
															             segment_size = self.io.segment_size(segment) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             freeable_ratio = 1.0 * freeable_space / segment_size 
														 | 
														
														 | 
														
															             freeable_ratio = 1.0 * freeable_space / segment_size 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -798,6 +805,7 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     freeable_space, 
														 | 
														
														 | 
														
															                     freeable_space, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 ) 
														 | 
														
														 | 
														
															                 ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 pi.show() 
														 | 
														
														 | 
														
															                 pi.show() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 continue 
														 | 
														
														 | 
														
															                 continue 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             segments.setdefault(segment, 0) 
														 | 
														
														 | 
														
															             segments.setdefault(segment, 0) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             logger.debug( 
														 | 
														
														 | 
														
															             logger.debug( 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -905,7 +913,9 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             assert segments[segment] == 0, "Corrupted segment reference count - corrupted index or hints" 
														 | 
														
														 | 
														
															             assert segments[segment] == 0, "Corrupted segment reference count - corrupted index or hints" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             unused.append(segment) 
														 | 
														
														 | 
														
															             unused.append(segment) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             pi.show() 
														 | 
														
														 | 
														
															             pi.show() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         pi.finish() 
														 | 
														
														 | 
														
															         pi.finish() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         complete_xfer(intermediate=False) 
														 | 
														
														 | 
														
															         complete_xfer(intermediate=False) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.io.clear_empty_dirs() 
														 | 
														
														 | 
														
															         self.io.clear_empty_dirs() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         quota_use_after = self.storage_quota_use 
														 | 
														
														 | 
														
															         quota_use_after = self.storage_quota_use 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -924,6 +934,7 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             ) 
														 | 
														
														 | 
														
															             ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             for i, (segment, filename) in enumerate(self.io.segment_iterator()): 
														 | 
														
														 | 
														
															             for i, (segment, filename) in enumerate(self.io.segment_iterator()): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 pi.show(i) 
														 | 
														
														 | 
														
															                 pi.show(i) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 if index_transaction_id is not None and segment <= index_transaction_id: 
														 | 
														
														 | 
														
															                 if index_transaction_id is not None and segment <= index_transaction_id: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     continue 
														 | 
														
														 | 
														
															                     continue 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 if segment > segments_transaction_id: 
														 | 
														
														 | 
														
															                 if segment > segments_transaction_id: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -931,6 +942,7 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 objects = self.io.iter_objects(segment) 
														 | 
														
														 | 
														
															                 objects = self.io.iter_objects(segment) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 self._update_index(segment, objects) 
														 | 
														
														 | 
														
															                 self._update_index(segment, objects) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             pi.finish() 
														 | 
														
														 | 
														
															             pi.finish() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             self.write_index() 
														 | 
														
														 | 
														
															             self.write_index() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         finally: 
														 | 
														
														 | 
														
															         finally: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             self.exclusive = remember_exclusive 
														 | 
														
														 | 
														
															             self.exclusive = remember_exclusive 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1061,6 +1073,7 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         segment = -1  # avoid uninitialized variable if there are no segment files at all 
														 | 
														
														 | 
														
															         segment = -1  # avoid uninitialized variable if there are no segment files at all 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         for i, (segment, filename) in enumerate(self.io.segment_iterator()): 
														 | 
														
														 | 
														
															         for i, (segment, filename) in enumerate(self.io.segment_iterator()): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             pi.show(i) 
														 | 
														
														 | 
														
															             pi.show(i) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if segment <= last_segment_checked: 
														 | 
														
														 | 
														
															             if segment <= last_segment_checked: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 continue 
														 | 
														
														 | 
														
															                 continue 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if segment > transaction_id: 
														 | 
														
														 | 
														
															             if segment > transaction_id: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1087,6 +1100,7 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             self.save_config(self.path, self.config) 
														 | 
														
														 | 
														
															             self.save_config(self.path, self.config) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         pi.finish() 
														 | 
														
														 | 
														
															         pi.finish() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         # self.index, self.segments, self.compact now reflect the state of the segment files up to <transaction_id>. 
														 | 
														
														 | 
														
															         # self.index, self.segments, self.compact now reflect the state of the segment files up to <transaction_id>. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         # We might need to add a commit tag if no committed segment is found. 
														 | 
														
														 | 
														
															         # We might need to add a commit tag if no committed segment is found. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if repair and segments_transaction_id is None: 
														 | 
														
														 | 
														
															         if repair and segments_transaction_id is None: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1110,12 +1124,14 @@ class Repository: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     current_value = current_index.get(key, not_found) 
														 | 
														
														 | 
														
															                     current_value = current_index.get(key, not_found) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     if current_value != value: 
														 | 
														
														 | 
														
															                     if current_value != value: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                         logger.warning(line_format, bin_to_hex(key), value, current_value) 
														 | 
														
														 | 
														
															                         logger.warning(line_format, bin_to_hex(key), value, current_value) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 for key, current_value in current_index.iteritems(): 
														 | 
														
														 | 
														
															                 for key, current_value in current_index.iteritems(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     if key in self.index: 
														 | 
														
														 | 
														
															                     if key in self.index: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                         continue 
														 | 
														
														 | 
														
															                         continue 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     value = self.index.get(key, not_found) 
														 | 
														
														 | 
														
															                     value = self.index.get(key, not_found) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     if current_value != value: 
														 | 
														
														 | 
														
															                     if current_value != value: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                         logger.warning(line_format, bin_to_hex(key), value, current_value) 
														 | 
														
														 | 
														
															                         logger.warning(line_format, bin_to_hex(key), value, current_value) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                self._send_log() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if repair: 
														 | 
														
														 | 
														
															             if repair: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 self.write_index() 
														 | 
														
														 | 
														
															                 self.write_index() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.rollback() 
														 | 
														
														 | 
														
															         self.rollback() 
														 |