formatter: add general way to switch hex/short functions
authorYuya Nishihara <yuya@tcha.org>
Fri, 03 Oct 2014 22:20:02 +0900
changeset 22701 cb28d2b3db0b
parent 22700 41421bd9c42e
child 22702 08a4e70ed183
formatter: add general way to switch hex/short functions This seems a bit awkward, but it can avoid duplicates in annotate, tags, branches and bookmarks. I guess fm.hexfunc can eventually be removed (or redesigned) when it gets template backend.
mercurial/commands.py
mercurial/formatter.py
--- a/mercurial/commands.py	Fri Oct 03 11:37:56 2014 -0500
+++ b/mercurial/commands.py	Fri Oct 03 22:20:02 2014 +0900
@@ -276,10 +276,7 @@
 
     fm = ui.formatter('annotate', opts)
     datefunc = ui.quiet and util.shortdate or util.datestr
-    if fm or ui.debugflag:
-        hexfn = hex
-    else:
-        hexfn = short
+    hexfn = fm.hexfunc
 
     opmap = [('user', ' ', lambda x: x[0].user(), ui.shortuser),
              ('number', ' ', lambda x: x[0].rev(), str),
@@ -6086,10 +6083,7 @@
     """
 
     fm = ui.formatter('tags', opts)
-    if fm or ui.debugflag:
-        hexfunc = hex
-    else:
-        hexfunc = short
+    hexfunc = fm.hexfunc
     tagtype = ""
 
     for t, n in reversed(repo.tagslist()):
--- a/mercurial/formatter.py	Fri Oct 03 11:37:56 2014 -0500
+++ b/mercurial/formatter.py	Fri Oct 03 22:20:02 2014 +0900
@@ -6,6 +6,7 @@
 # GNU General Public License version 2 or any later version.
 
 import cPickle
+from node import hex, short
 from i18n import _
 import encoding, util
 
@@ -16,6 +17,8 @@
         self._style = opts.get("style")
         self._template = opts.get("template")
         self._item = None
+        # function to convert node to string suitable for this output
+        self.hexfunc = hex
     def __nonzero__(self):
         '''return False if we're not doing real templating so we can
         skip extra work'''
@@ -51,6 +54,10 @@
     '''the default text output scheme'''
     def __init__(self, ui, topic, opts):
         baseformatter.__init__(self, ui, topic, opts)
+        if ui.debugflag:
+            self.hexfunc = hex
+        else:
+            self.hexfunc = short
     def __nonzero__(self):
         return False
     def startitem(self):