diff --git a/remotefilelog/basepack.py b/remotefilelog/basepack.py --- a/remotefilelog/basepack.py +++ b/remotefilelog/basepack.py @@ -114,31 +114,31 @@ yield path def _getavailablepackfiles(self): - suffixlen = len(self.INDEXSUFFIX) + indexsuffixlen = len(self.INDEXSUFFIX) + packsuffixlen = len(self.PACKSUFFIX) - files = [] - filenames = set() + fileswithoutext = set() try: - for filename, size, stat in osutil.listdir(self.path, stat=True): - files.append((stat.st_mtime, filename)) - filenames.add(filename) + for filename, _size in osutil.listdir(self.path): + filenamewithoutext = None + if filename[-indexsuffixlen:] == self.INDEXSUFFIX: + filenamewithoutext = filename[:-indexsuffixlen] + elif filename[-packsuffixlen:] == self.PACKSUFFIX: + filenamewithoutext = filename[:-packsuffixlen] + + # Since we expect to have two files corresponding to each + # 'filename without the extension' i.e. the index file and the + # pack file, we can yield the 'filename without the extension' + # if we see it more than one time. + if filenamewithoutext: + if filenamewithoutext in fileswithoutext: + yield os.path.join(self.path, filenamewithoutext) + else: + fileswithoutext.add(filenamewithoutext) except OSError as ex: if ex.errno != errno.ENOENT: raise - # TODO: Refactor/Remove this section because there are negligible - # performance benefits of fetching the most recent files here after - # adding the LRU cache. - - # Put most recent pack files first since they contain the most recent - # info. - files = sorted(files, reverse=True) - for mtime, filename in files: - packfilename = '%s%s' % (filename[:-suffixlen], self.PACKSUFFIX) - if (filename[-suffixlen:] == self.INDEXSUFFIX - and packfilename in filenames): - yield os.path.join(self.path, filename)[:-suffixlen] - def getpack(self, path): raise NotImplemented()