应该如何管理'.hg/'状态目录中的钩子特定文件?



我正在使用Mercurial API的本地Python实现编写一系列changegroup和commit钩子。这部分要求我保存特定于我的钩子的某些信息,例如我的钩子实际看到的最后一个版本ID。

我想以一种方式做到这一点,即所有外部元数据都保存在存储库中,而不是实际跟踪或忽略。我想确保这些数据永远不会成为历史的一部分。

我的第一个想法是使用现有的.hg/hgrc配置,因为我只需要存储简单的字符串和整数,这就是我的钩子当前使用的少数配置行。该API提供了一种通过ui.config*读取该配置的简单方法,但似乎没有提供实际更改或写入该配置的方法。

对我来说很容易得到配置列表,附加或修改它,然后使用配置模块编写它,但我真的觉得我可能忽略了API提供的一些东西。我一直在想"如果在一个成熟的API中没有明显的方法来做到这一点,我可能会用错误的方法。"

是否有一个"适当"的方法来做到这一点,也许使用API?或者,也许是我在API中没有发现的东西来管理这种数据而不使用hgrc ?我最担心的是多人同时推的比赛。

hgrc配置文件故意是只读的,并且没有内部API可以写入这些文件。这条规则的唯一例外是,clone会创建一个默认的.hg/hgrc,其中包含克隆源URL。所以,不,不要尝试使用这个

做这类事情的通常方法是读取和写入您自己的私有文件。Mercurial本身拥有这个名称空间,并以一种有机的、向后兼容的方式增长其内容,因此您最好选择一个不太可能与其他任何人或任何未来的Mercurial特性发生冲突的子目录名,并将文件存储在那里。建议基于文本。

为方便起见,repo对象包含一个工作状态空间(。Hg/, repo.wopener())中受repo.wlock()保护的文件和存储库中的文件。Hg/store/, repo.sopener())被repo.lock()保护。

也可以进行原子文件写入:

f = self.wopener("mydata", "w", atomictemp=True)
f.write(somedata)
f.close()

一定要把这个也读了:

https://www.mercurial-scm.org/wiki/LockingDesign

相关内容

最新更新