##// 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 import os
10 import os
11 import re
11 import re
12 import stat
12 import stat
13 from typing import Generator
13 from typing import Generator, List
14
14
15 from .i18n import _
15 from .i18n import _
16 from .pycompat import getattr
16 from .pycompat import getattr
@@ -459,12 +459,32 b' FILETYPE_FILELOG_OTHER = FILEFLAGS_FILEL'
459 FILETYPE_OTHER = FILEFLAGS_OTHER
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 @attr.s(slots=True, init=False)
479 @attr.s(slots=True, init=False)
463 class BaseStoreEntry:
480 class BaseStoreEntry:
464 """An entry in the store
481 """An entry in the store
465
482
466 This is returned by `store.walk` and represent some data in the store."""
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 @attr.s(slots=True, init=False)
489 @attr.s(slots=True, init=False)
470 class SimpleStoreEntry(BaseStoreEntry):
490 class SimpleStoreEntry(BaseStoreEntry):
@@ -489,7 +509,7 b' class SimpleStoreEntry(BaseStoreEntry):'
489 self._file_size = file_size
509 self._file_size = file_size
490 self._files = None
510 self._files = None
491
511
492 def files(self):
512 def files(self) -> List[StoreFile]:
493 if self._files is None:
513 if self._files is None:
494 self._files = [
514 self._files = [
495 StoreFile(
515 StoreFile(
@@ -544,7 +564,7 b' class RevlogStoreEntry(BaseStoreEntry):'
544 """unencoded path of the main revlog file"""
564 """unencoded path of the main revlog file"""
545 return self._path_prefix + b'.i'
565 return self._path_prefix + b'.i'
546
566
547 def files(self):
567 def files(self) -> List[StoreFile]:
548 if self._files is None:
568 if self._files is None:
549 self._files = []
569 self._files = []
550 for ext in sorted(self._details, key=_ext_key):
570 for ext in sorted(self._details, key=_ext_key):
@@ -569,23 +589,6 b' class RevlogStoreEntry(BaseStoreEntry):'
569 return filelog.filelog(repo.svfs, self.target_id)
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 def _gather_revlog(files_data):
592 def _gather_revlog(files_data):
590 """group files per revlog prefix
593 """group files per revlog prefix
591
594
General Comments 0
You need to be logged in to leave comments. Login now