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