[PATCH 2 of 2] templater: make label() just fail if ui object isn't available

Yuya Nishihara yuya at tcha.org
Wed Mar 9 10:34:29 EST 2016

# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1457535566 -32400
#      Wed Mar 09 23:59:26 2016 +0900
# Node ID ed81b4ff8cf1af457072eaff8ae055943562b624
# Parent  62d64dedd1098442819b8f16ae7a7848e45d3a59
templater: make label() just fail if ui object isn't available

Silent failure hides bugs and makes it harder to track down the issue. It's
worse than raising exception.

In future patches, I plan to sort out template functions that require 'ui',
'ctx', 'fctx', etc. so that incompatible functions are excluded and the doc can
say in which context these functions are usable.

  @templatefunc('label', requires=('ui',))
  def label(context, mapping, args):

diff --git a/mercurial/templater.py b/mercurial/templater.py
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -547,12 +547,8 @@ def label(context, mapping, args):
         # i18n: "label" is a keyword
         raise error.ParseError(_("label expects two arguments"))
+    ui = mapping['ui']
     thing = evalstring(context, mapping, args[1])
-    ui = mapping.get('ui', '')
-    if isinstance(ui, str):
-        return thing
     # preserve unknown symbol as literal so effects like 'red', 'bold',
     # etc. don't need to be quoted
     label = evalstringliteral(context, mapping, args[0])

More information about the Mercurial-devel mailing list