##// END OF EJS Templates
store: declare a `files` method on BaseStoreEntry...
marmoute -
r51531:8fc10bfd default
parent child Browse files
Show More
@@ -10,7 +10,7 b' import functools'
10 10 import os
11 11 import re
12 12 import stat
13 from typing import Generator
13 from typing import Generator, List
14 14
15 15 from .i18n import _
16 16 from .pycompat import getattr
@@ -459,12 +459,32 b' FILETYPE_FILELOG_OTHER = FILEFLAGS_FILEL'
459 459 FILETYPE_OTHER = FILEFLAGS_OTHER
460 460
461 461
462 @attr.s(slots=True)
463 class StoreFile:
464 """a file matching a store entry"""
465
466 unencoded_path = attr.ib()
467 _file_size = attr.ib(default=None)
468 is_volatile = attr.ib(default=False)
469
470 def file_size(self, vfs):
471 if self._file_size is None:
472 try:
473 self._file_size = vfs.stat(self.unencoded_path).st_size
474 except FileNotFoundError:
475 self._file_size = 0
476 return self._file_size
477
478
462 479 @attr.s(slots=True, init=False)
463 480 class BaseStoreEntry:
464 481 """An entry in the store
465 482
466 483 This is returned by `store.walk` and represent some data in the store."""
467 484
485 def files(self) -> List[StoreFile]:
486 raise NotImplementedError
487
468 488
469 489 @attr.s(slots=True, init=False)
470 490 class SimpleStoreEntry(BaseStoreEntry):
@@ -489,7 +509,7 b' class SimpleStoreEntry(BaseStoreEntry):'
489 509 self._file_size = file_size
490 510 self._files = None
491 511
492 def files(self):
512 def files(self) -> List[StoreFile]:
493 513 if self._files is None:
494 514 self._files = [
495 515 StoreFile(
@@ -544,7 +564,7 b' class RevlogStoreEntry(BaseStoreEntry):'
544 564 """unencoded path of the main revlog file"""
545 565 return self._path_prefix + b'.i'
546 566
547 def files(self):
567 def files(self) -> List[StoreFile]:
548 568 if self._files is None:
549 569 self._files = []
550 570 for ext in sorted(self._details, key=_ext_key):
@@ -569,23 +589,6 b' class RevlogStoreEntry(BaseStoreEntry):'
569 589 return filelog.filelog(repo.svfs, self.target_id)
570 590
571 591
572 @attr.s(slots=True)
573 class StoreFile:
574 """a file matching an entry"""
575
576 unencoded_path = attr.ib()
577 _file_size = attr.ib(default=None)
578 is_volatile = attr.ib(default=False)
579
580 def file_size(self, vfs):
581 if self._file_size is None:
582 try:
583 self._file_size = vfs.stat(self.unencoded_path).st_size
584 except FileNotFoundError:
585 self._file_size = 0
586 return self._file_size
587
588
589 592 def _gather_revlog(files_data):
590 593 """group files per revlog prefix
591 594
General Comments 0
You need to be logged in to leave comments. Login now