Re-name messages to eliminate numbering gaps. Invalidates keys.
(self)
| 1272 | _sync_close(f) |
| 1273 | |
| 1274 | def pack(self): |
| 1275 | """Re-name messages to eliminate numbering gaps. Invalidates keys.""" |
| 1276 | sequences = self.get_sequences() |
| 1277 | prev = 0 |
| 1278 | changes = [] |
| 1279 | for key in self.iterkeys(): |
| 1280 | if key - 1 != prev: |
| 1281 | changes.append((key, prev + 1)) |
| 1282 | try: |
| 1283 | os.link(os.path.join(self._path, str(key)), |
| 1284 | os.path.join(self._path, str(prev + 1))) |
| 1285 | except (AttributeError, PermissionError): |
| 1286 | os.rename(os.path.join(self._path, str(key)), |
| 1287 | os.path.join(self._path, str(prev + 1))) |
| 1288 | else: |
| 1289 | os.unlink(os.path.join(self._path, str(key))) |
| 1290 | prev += 1 |
| 1291 | self._next_key = prev + 1 |
| 1292 | if len(changes) == 0: |
| 1293 | return |
| 1294 | for name, key_list in sequences.items(): |
| 1295 | for old, new in changes: |
| 1296 | if old in key_list: |
| 1297 | key_list[key_list.index(old)] = new |
| 1298 | self.set_sequences(sequences) |
| 1299 | |
| 1300 | def _dump_sequences(self, message, key): |
| 1301 | """Inspect a new MHMessage and update sequences appropriately.""" |
no test coverage detected