hooks: Add a hook to limit the size of any individual file
This commit is contained in:
parent
ce941fd2ae
commit
abf26fd828
1 changed files with 32 additions and 0 deletions
32
util/hgfilesize.py
Normal file
32
util/hgfilesize.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
from mercurial import context
|
||||||
|
from mercurial.i18n import _
|
||||||
|
|
||||||
|
'''
|
||||||
|
[extensions]
|
||||||
|
hgfilesize=~/m5/incoming/util/hgfilesize.py
|
||||||
|
|
||||||
|
[hooks]
|
||||||
|
pretxncommit = python:hgfilesize.limit_file_size
|
||||||
|
pretxnchangegroup = python:hgfilesize.limit_file_size
|
||||||
|
|
||||||
|
[limit_file_size]
|
||||||
|
maximum_file_size = 200000
|
||||||
|
'''
|
||||||
|
|
||||||
|
def limit_file_size(ui, repo, node=None, **kwargs):
|
||||||
|
'''forbid files over a given size'''
|
||||||
|
|
||||||
|
# default limit is 1 MB
|
||||||
|
limit = int(ui.config('limit_file_size', 'maximum_file_size', 1024*1024))
|
||||||
|
existing_tip = context.changectx(repo, node).rev()
|
||||||
|
new_tip = context.changectx(repo, 'tip').rev()
|
||||||
|
for rev in xrange(existing_tip, new_tip + 1):
|
||||||
|
ctx = context.changectx(repo, rev)
|
||||||
|
for f in ctx.files():
|
||||||
|
fctx = ctx.filectx(f)
|
||||||
|
if fctx.size() > limit:
|
||||||
|
ui.write(_('file %s of %s is too large: %d > %d\n') % \
|
||||||
|
(f, ctx, fctx.size(), limit))
|
||||||
|
return True # This is invalid
|
||||||
|
|
||||||
|
return False # Things are OK.
|
Loading…
Reference in a new issue