我已经编写了一个Hg挂钩(在Python中),以根据小组规则检查提交的文件的有效性。这些规则之一禁止文件大于XX kB,除非与孔眼同意。万一提交了大文件,我希望钩子要求用户允许该文件。
我是这样实现的:
import re, os, sys, mercurial
MAX_SIZE_KB = 500
def check_committed_files(ui, repo, **kwargs):
changelog = repo.changelog._cache
lines = changelog[2].splitlines()
ui.status("Checking files...\n")
for line in lines[3:-2]:
fn = line
ui.status(" " + fn)
# check file size
file_size_kb = float(os.stat(line).st_size) / 1024
if file_size_kb > MAX_SIZE_KB:
if ui.prompt(" Allow file [%s] of %g kB?" % (fn, file_size_kb)).lower() not in ['y', 'yes']:
ui.warn(" Not allowed by user\n")
return 1
ui.flush()
return 0
如果我使用Hg CLI,一切都很好。但是当我使用TortoiseHg时,提示会自动为yes,因此我可以在控制台中找到它:
允许文件[test.txt]为2573.49 kB? y
然后挂钩继续。我希望TortoiseHg显示“是/否”对话框。可能吗?我想让解决方案尽可能便携,例如无需用户安装任何外部Python模块。
由于这是我第一次尝试使用Hg挂钩,因此也非常感谢我对实现的其他任何评论。