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

Tim*_*ost 1 python mercurial mercurial-hook mercurial-api

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

我想以一种方式执行此操作,其中所有外部元数据都保存在存储库中,但实际上未跟踪或忽略.我想确保这些数据永远不会成为历史的一部分.

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

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

是否有一种'正确'的方法来做到这一点,也许使用API​​?或者,也许我在API中没有找到管理这类数据而不使用的东西hgrc?我主要担心的是多人同时推动的比赛.

mpm*_*mpm 5

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

执行此类操作的常用方法是只读取和编写自己的私有文件.Mercurial本身拥有此命名空间并以有机,向后兼容的方式增加其内容,因此您最好的选择是选择一个不太可能与其他任何人碰撞的子目录名称或任何未来的Mercurial功能并将您的文件存储在那里.建议使用基于文本的.

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

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

f = self.wopener("mydata", "w", atomictemp=True)
f.write(somedata)
f.close()
Run Code Online (Sandbox Code Playgroud)

一定要读这个:

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