templates: extract function to `stringutil` for getting first line of text
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 24 Mar 2022 16:09:12 -0700
changeset 49021 51aed118f9dc
parent 49020 1138674ecdb8
child 49022 e160f073c37b
templates: extract function to `stringutil` for getting first line of text It's surprisingly hard to get the first line from a string, so let's have our own function in `stringutil` for it. Differential Revision: https://phab.mercurial-scm.org/D12404
mercurial/templatefilters.py
mercurial/utils/stringutil.py
--- a/mercurial/templatefilters.py	Thu Mar 24 15:41:29 2022 -0700
+++ b/mercurial/templatefilters.py	Thu Mar 24 16:09:12 2022 -0700
@@ -268,10 +268,7 @@
 @templatefilter(b'firstline', intype=bytes)
 def firstline(text):
     """Any text. Returns the first line of text."""
-    try:
-        return text.splitlines()[0]
-    except IndexError:
-        return b''
+    return stringutil.firstline(text)
 
 
 @templatefilter(b'hex', intype=bytes)
--- a/mercurial/utils/stringutil.py	Thu Mar 24 15:41:29 2022 -0700
+++ b/mercurial/utils/stringutil.py	Thu Mar 24 16:09:12 2022 -0700
@@ -685,6 +685,14 @@
     return _correctauthorformat.match(author) is not None
 
 
+def firstline(text):
+    """Return the first line of the input"""
+    try:
+        return text.splitlines()[0]
+    except IndexError:
+        return b''
+
+
 def ellipsis(text, maxlength=400):
     """Trim string to at most maxlength (default: 400) columns in display."""
     return encoding.trim(text, maxlength, ellipsis=b'...')