2

I've written an Hg hook (in Python) to check the validity of the committed files according to out team rules. One of these rules prohibits files larger than XX kB, unless agreed with the ream. In case a large file is committed, I would like the hook to ask the user to allow the file.

I implemented it like this:

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

It all works well if I use Hg CLI. But when I use TortoiseHg, the prompt is automatically yes-ed, so I get this in console:

Allow file [test.txt] of 2573.49 kB? y

and the hook goes on. I would like TortoiseHg to show a dialogue with Yes/No buttons. Is it possible? I'd like to have the solution as portable as possible, so e.g. no external Python modules that users need to install.

Since this is my first attempt with Hg hooks, any other comments on my implementation are also much appreciated.

StayOnTarget
  • 11,743
  • 10
  • 52
  • 81
texnic
  • 3,959
  • 4
  • 42
  • 75
  • Probably relates to issue [5090](https://bitbucket.org/tortoisehg/thg/issues/5090) in TortoiseHg. – texnic Jan 31 '19 at 13:15

0 Answers0