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