1

我正在做一个必须存储.hg目录的项目。最简单的方法是打包.hghg.tar. 我将它保存在 MongoDB 的 GridFS 文件系统中。

如果我按照这个计划去,我必须把焦油读出来。

import tarfile, cStringIO as io
repo = get_repo(saved_repo.id)
ios = io.StringIO()
ios.write(repo.hgfile.read())
ios.seek(0)

tar = tarfile.open(mode='r', fileobj=ios)
members = tar.getmembers()

#for info in members:
#    tar.extract(info.name, '/tmp')
for file in members:
    print file.name, file.isdir()

这是一个工作代码。随着循环的继续,我可以获得所有文件和目录的名称。

我的问题是如何将这个 tar 提取到一个有效的、类似文件系统的目录中。我可以.extractfile单独进入内存,但如果我想输入 Mercurial API,我可能需要整个目录作为.hg内存中的单个 DIRECTORY ,就像它们在文件系统中的存在方式一样。

想法?

4

1 回答 1

1

Mercurial 有一个opener用于抽象文件系统访问的概念。我首先查看了http://hg.intevation.org/mercurial/crew/file/tip/mercurial/revlog.py看看是否可以替换 revlog 类(它是 changelog、manifest log 和 filelogs 的基类) ,但最新版本的 Mercurial 也有一个 VFS 抽象层。它可以在http://hg.intevation.org/mercurial/crew/file/8c64c4af21a4/mercurial/scmutil.py#l202中找到,并被localrepo.localrepository该类用于所有文件访问。

于 2013-04-09T12:59:27.593 回答