Я написал хук Hg (в Python) для проверки правильности принятых файлов в соответствии с правилами нашей команды. Одно из этих правил запрещает файлы размером более XX кБ, если не согласовано с пакетом. В случае фиксации большого файла я бы хотел, чтобы хук попросил пользователя разрешить файл.
Я реализовал это так:
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, подсказка автоматически да-да, поэтому я получаю это в консоли:
Разрешить файл [test.txt] размером 2573,49 кБ? у
и крюк продолжается. Я бы хотел, чтобы TortoiseHg показывал диалог с кнопками Да / Нет. Является ли это возможным? Мне бы хотелось, чтобы решение было максимально портативным, например, нет внешних модулей Python, которые должны установить пользователи.
Поскольку это моя первая попытка с перехватом Hg, любые другие комментарии к моей реализации также приветствуются.