rebase: make summary template configurable, with default to shared template
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 22 Oct 2020 23:10:06 -0700
changeset 45770 96fcc37a9c80
parent 45769 b4c193509cd0
child 45771 f90a5c211251
rebase: make summary template configurable, with default to shared template Differential Revision: https://phab.mercurial-scm.org/D9251
hgext/rebase.py
mercurial/cmdutil.py
mercurial/configitems.py
tests/test-rebase-templates.t
--- a/hgext/rebase.py	Thu Oct 22 22:29:22 2020 -0700
+++ b/hgext/rebase.py	Thu Oct 22 23:10:06 2020 -0700
@@ -34,7 +34,6 @@
     dirstateguard,
     error,
     extensions,
-    formatter,
     merge as mergemod,
     mergestate as mergestatemod,
     mergeutil,
@@ -52,7 +51,6 @@
     scmutil,
     smartset,
     state as statemod,
-    templatekw,
     util,
 )
 
@@ -153,7 +151,9 @@
         labels_spec,
         labels_spec,
     )
-    return cmdutil.rendertemplate(ctx, spec)
+    return cmdutil.format_changeset_summary(
+        ctx.repo().ui, ctx, command=b'rebase', default_spec=spec
+    )
 
 
 class rebaseruntime(object):
--- a/mercurial/cmdutil.py	Thu Oct 22 22:29:22 2020 -0700
+++ b/mercurial/cmdutil.py	Thu Oct 22 23:10:06 2020 -0700
@@ -1210,6 +1210,24 @@
     return t.renderdefault(mapping)
 
 
+def format_changeset_summary(ui, ctx, command=None, default_spec=None):
+    """Format a changeset summary (one line)."""
+    spec = None
+    if command:
+        spec = ui.config(
+            b'command-templates', b'oneline-summary.%s' % command, None
+        )
+    if not spec:
+        spec = ui.config(b'command-templates', b'oneline-summary')
+    if not spec:
+        spec = default_spec
+    if not spec:
+        # TODO: Pick a default we can agree on. This isn't used yet.
+        raise error.ProgrammingError(b"no default one-line summary defined yet")
+    text = rendertemplate(ctx, spec)
+    return text.split(b'\n')[0]
+
+
 def _buildfntemplate(pat, total=None, seqno=None, revwidth=None, pathname=None):
     r"""Convert old-style filename format string to template string
 
--- a/mercurial/configitems.py	Thu Oct 22 22:29:22 2020 -0700
+++ b/mercurial/configitems.py	Thu Oct 22 23:10:06 2020 -0700
@@ -251,6 +251,15 @@
     default=None,
     alias=[(b'ui', b'pre-merge-tool-output-template')],
 )
+coreconfigitem(
+    b'command-templates', b'oneline-summary', default=None,
+)
+coreconfigitem(
+    b'command-templates',
+    b'oneline-summary.*',
+    default=dynamicdefault,
+    generic=True,
+)
 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
 coreconfigitem(
     b'commands', b'commit.post-status', default=False,
--- a/tests/test-rebase-templates.t	Thu Oct 22 22:29:22 2020 -0700
+++ b/tests/test-rebase-templates.t	Thu Oct 22 23:10:06 2020 -0700
@@ -82,3 +82,21 @@
   o  0:18d04c59bb5d Added a
   
 
+Respects command-templates.oneline-summary
+
+  $ hg rebase -r 7 -d 8 -n --config command-templates.oneline-summary='rev: {rev}'
+  starting dry-run rebase; repository will not be changed
+  rebasing rev: 7
+  note: not rebasing rev: 7, its destination already has all its changes
+  dry-run rebase completed successfully; run without -n/--dry-run to perform this rebase
+
+
+command-templates.oneline-summary.rebase overrides
+
+  $ hg rebase -r 7 -d 8 -n \
+  > --config command-templates.oneline-summary='global: {rev}' \
+  > --config command-templates.oneline-summary.rebase='override: {rev}'
+  starting dry-run rebase; repository will not be changed
+  rebasing override: 7
+  note: not rebasing override: 7, its destination already has all its changes
+  dry-run rebase completed successfully; run without -n/--dry-run to perform this rebase