hgfilesize.py revision 8652:104bd212ae41
11689SN/Afrom mercurial import context
29444SAndreas.Sandberg@ARM.comfrom mercurial.i18n import _
39920Syasuko.eckert@amd.com
47944SGiacomo.Gabrielli@arm.com'''
57944SGiacomo.Gabrielli@arm.com[extensions]
67944SGiacomo.Gabrielli@arm.comhgfilesize=~/m5/incoming/util/hgfilesize.py
77944SGiacomo.Gabrielli@arm.com
87944SGiacomo.Gabrielli@arm.com[hooks]
97944SGiacomo.Gabrielli@arm.compretxncommit = python:hgfilesize.limit_file_size
107944SGiacomo.Gabrielli@arm.compretxnchangegroup = python:hgfilesize.limit_file_size
117944SGiacomo.Gabrielli@arm.com
127944SGiacomo.Gabrielli@arm.com[limit_file_size]
137944SGiacomo.Gabrielli@arm.commaximum_file_size = 200000
147944SGiacomo.Gabrielli@arm.com'''
152326SN/A
161689SN/Adef limit_file_size(ui, repo, node=None, **kwargs):
171689SN/A    '''forbid files over a given size'''
181689SN/A
191689SN/A    # default limit is 1 MB
201689SN/A    limit = int(ui.config('limit_file_size', 'maximum_file_size', 1024*1024))
211689SN/A    existing_tip = context.changectx(repo, node).rev()
221689SN/A    new_tip = context.changectx(repo, 'tip').rev()
231689SN/A    for rev in xrange(existing_tip, new_tip + 1):
241689SN/A        ctx = context.changectx(repo, rev)
251689SN/A        for f in ctx.files():
261689SN/A            fctx = ctx.filectx(f)
271689SN/A            if fctx.size() > limit:
281689SN/A                ui.write(_('file %s of %s is too large: %d > %d\n') % \
291689SN/A                             (f, ctx, fctx.size(), limit))
301689SN/A                return True # This is invalid
311689SN/A
321689SN/A    return False # Things are OK.
331689SN/A