mercurial/templatefuncs.py
changeset 38265 41ae9b3cbfb9
parent 38244 688fbb758ba9
child 38267 fb874fc1d9b4
equal deleted inserted replaced
38264:fbb2eddea4d2 38265:41ae9b3cbfb9
    18     color,
    18     color,
    19     encoding,
    19     encoding,
    20     error,
    20     error,
    21     minirst,
    21     minirst,
    22     obsutil,
    22     obsutil,
    23     pycompat,
       
    24     registrar,
    23     registrar,
    25     revset as revsetmod,
    24     revset as revsetmod,
    26     revsetlang,
    25     revsetlang,
    27     scmutil,
    26     scmutil,
    28     templatefilters,
    27     templatefilters,
   402     """Return the max of an iterable"""
   401     """Return the max of an iterable"""
   403     if len(args) != 1:
   402     if len(args) != 1:
   404         # i18n: "max" is a keyword
   403         # i18n: "max" is a keyword
   405         raise error.ParseError(_("max expects one argument"))
   404         raise error.ParseError(_("max expects one argument"))
   406 
   405 
   407     iterable = evalfuncarg(context, mapping, args[0])
   406     iterable = evalwrapped(context, mapping, args[0])
   408     try:
   407     try:
   409         x = max(pycompat.maybebytestr(iterable))
   408         return iterable.getmax(context, mapping)
   410     except (TypeError, ValueError):
   409     except error.ParseError as err:
   411         # i18n: "max" is a keyword
   410         # i18n: "max" is a keyword
   412         raise error.ParseError(_("max first argument should be an iterable"))
   411         hint = _("max first argument should be an iterable")
   413     return templateutil.wraphybridvalue(iterable, x, x)
   412         raise error.ParseError(bytes(err), hint=hint)
   414 
   413 
   415 @templatefunc('min(iterable)')
   414 @templatefunc('min(iterable)')
   416 def min_(context, mapping, args, **kwargs):
   415 def min_(context, mapping, args, **kwargs):
   417     """Return the min of an iterable"""
   416     """Return the min of an iterable"""
   418     if len(args) != 1:
   417     if len(args) != 1:
   419         # i18n: "min" is a keyword
   418         # i18n: "min" is a keyword
   420         raise error.ParseError(_("min expects one argument"))
   419         raise error.ParseError(_("min expects one argument"))
   421 
   420 
   422     iterable = evalfuncarg(context, mapping, args[0])
   421     iterable = evalwrapped(context, mapping, args[0])
   423     try:
   422     try:
   424         x = min(pycompat.maybebytestr(iterable))
   423         return iterable.getmin(context, mapping)
   425     except (TypeError, ValueError):
   424     except error.ParseError as err:
   426         # i18n: "min" is a keyword
   425         # i18n: "min" is a keyword
   427         raise error.ParseError(_("min first argument should be an iterable"))
   426         hint = _("min first argument should be an iterable")
   428     return templateutil.wraphybridvalue(iterable, x, x)
   427         raise error.ParseError(bytes(err), hint=hint)
   429 
   428 
   430 @templatefunc('mod(a, b)')
   429 @templatefunc('mod(a, b)')
   431 def mod(context, mapping, args):
   430 def mod(context, mapping, args):
   432     """Calculate a mod b such that a / b + a mod b == a"""
   431     """Calculate a mod b such that a / b + a mod b == a"""
   433     if not len(args) == 2:
   432     if not len(args) == 2: