##// END OF EJS Templates
store: add logic to group revlog file together...
marmoute -
r51372:5217e363 default
parent child Browse files
Show More
@@ -5,7 +5,7
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8
8 import collections
9 9 import functools
10 10 import os
11 11 import re
@@ -395,6 +395,13 REVLOG_FILES_OTHER_EXT = (
395 395 b'.nd',
396 396 b'.sda',
397 397 )
398 # file extension that also use a `-SOMELONGIDHASH.ext` form
399 REVLOG_FILES_LONG_EXT = (
400 b'.nd',
401 b'.idx',
402 b'.dat',
403 b'.sda',
404 )
398 405 # files that are "volatile" and might change between listing and streaming
399 406 #
400 407 # note: the ".nd" file are nodemap data and won't "change" but they might be
@@ -532,6 +539,30 class StoreFile:
532 539 return 0
533 540
534 541
542 def _gather_revlog(files_data):
543 """group files per revlog prefix
544
545 The returns a two level nested dict. The top level key is the revlog prefix
546 without extension, the second level is all the file "suffix" that were
547 seen for this revlog and arbitrary file data as value.
548 """
549 revlogs = collections.defaultdict(dict)
550 for u, value in files_data:
551 name, ext = _split_revlog_ext(u)
552 revlogs[name][ext] = value
553 return sorted(revlogs.items())
554
555
556 def _split_revlog_ext(filename):
557 """split the revlog file prefix from the variable extension"""
558 if filename.endswith(REVLOG_FILES_LONG_EXT):
559 char = b'-'
560 else:
561 char = b'.'
562 idx = filename.rfind(char)
563 return filename[:idx], filename[idx:]
564
565
535 566 class basicstore:
536 567 '''base class for local repository stores'''
537 568
@@ -592,8 +623,10 class basicstore:
592 623 be a list and the filenames that can't be decoded are added
593 624 to it instead. This is very rarely needed."""
594 625 files = self._walk(b'data', True) + self._walk(b'meta', True)
595 for u, (t, s) in files:
596 if t is not None:
626 files = (f for f in files if f[1][0] is not None)
627 for revlog, details in _gather_revlog(files):
628 for ext, (t, s) in sorted(details.items()):
629 u = revlog + ext
597 630 yield RevlogStoreEntry(
598 631 unencoded_path=u,
599 632 revlog_type=FILEFLAGS_FILELOG,
General Comments 0
You need to be logged in to leave comments. Login now