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(): if f not in ctx: continue 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.