diff --git a/pym/calculate/lib/utils/content.py b/pym/calculate/lib/utils/content.py index 97bf172..54afd5e 100644 --- a/pym/calculate/lib/utils/content.py +++ b/pym/calculate/lib/utils/content.py @@ -362,12 +362,7 @@ class ContentsStorage(ContentsFormat): f.write("{CATEGORY}/{PN}:{SLOTONLY} ".format(**data['package'])) self._write_info(f, fn, data) - def restore(self, prefix='/'): - """ - Восстановить записи о файлах принадлежащих пакету. - :param prefix: - :return: - """ + def _get_packages(self, prefix='/'): for package, objinfos in groupby( sorted(readLinesFile(self.storage_file)), lambda x: x.partition(" ")[0]): @@ -377,10 +372,19 @@ class ContentsStorage(ContentsFormat): if package: package = package[-1] content = PkgContents(str(package), prefix) - for infoline in (x.strip().partition(' ')[2] for x in objinfos): - fn, data = self._identifyLine(infoline) - if path.exists(fn): - content.content[fn] = data - content.addDir(path.dirname(fn)) - os.utime(fn, (int(data['mtime']), int(data['mtime']))) - content.writeContents() + yield content, objinfos + + def restore(self, prefix='/'): + """ + Восстановить записи о файлах принадлежащих пакету. + :param prefix: + :return: + """ + for content, objinfos in self._get_packages(prefix): + for infoline in (x.strip().partition(' ')[2] for x in objinfos): + fn, data = self._identifyLine(infoline) + if path.exists(fn): + content.content[fn] = data + content.addDir(path.dirname(fn)) + os.utime(fn, (int(data['mtime']), int(data['mtime']))) + content.writeContents()