18652Snate@binkert.orgfrom mercurial import context 28652Snate@binkert.orgfrom mercurial.i18n import _ 38652Snate@binkert.org 48652Snate@binkert.org''' 58652Snate@binkert.org[extensions] 68652Snate@binkert.orghgfilesize=~/m5/incoming/util/hgfilesize.py 78652Snate@binkert.org 88652Snate@binkert.org[hooks] 98652Snate@binkert.orgpretxncommit = python:hgfilesize.limit_file_size 108652Snate@binkert.orgpretxnchangegroup = python:hgfilesize.limit_file_size 118652Snate@binkert.org 128652Snate@binkert.org[limit_file_size] 138652Snate@binkert.orgmaximum_file_size = 200000 148652Snate@binkert.org''' 158652Snate@binkert.org 168652Snate@binkert.orgdef limit_file_size(ui, repo, node=None, **kwargs): 178652Snate@binkert.org '''forbid files over a given size''' 188652Snate@binkert.org 198652Snate@binkert.org # default limit is 1 MB 208652Snate@binkert.org limit = int(ui.config('limit_file_size', 'maximum_file_size', 1024*1024)) 218652Snate@binkert.org existing_tip = context.changectx(repo, node).rev() 228652Snate@binkert.org new_tip = context.changectx(repo, 'tip').rev() 238652Snate@binkert.org for rev in xrange(existing_tip, new_tip + 1): 248652Snate@binkert.org ctx = context.changectx(repo, rev) 258652Snate@binkert.org for f in ctx.files(): 268680Snate@binkert.org if f not in ctx: 278680Snate@binkert.org continue 288652Snate@binkert.org fctx = ctx.filectx(f) 298652Snate@binkert.org if fctx.size() > limit: 308652Snate@binkert.org ui.write(_('file %s of %s is too large: %d > %d\n') % \ 318652Snate@binkert.org (f, ctx, fctx.size(), limit)) 328652Snate@binkert.org return True # This is invalid 338652Snate@binkert.org 348652Snate@binkert.org return False # Things are OK. 35