D5742: histedit: add templating support to histedit's rule file generation

durin42 (Augie Fackler) phabricator at mercurial-scm.org
Wed Jan 30 08:19:12 EST 2019


durin42 updated this revision to Diff 13570.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D5742?vs=13565&id=13570

REVISION DETAIL
  https://phab.mercurial-scm.org/D5742

AFFECTED FILES
  hgext/histedit.py
  mercurial/help.py
  tests/test-histedit-commute.t

CHANGE DETAILS

diff --git a/tests/test-histedit-commute.t b/tests/test-histedit-commute.t
--- a/tests/test-histedit-commute.t
+++ b/tests/test-histedit-commute.t
@@ -50,15 +50,40 @@
      user:        test
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     a
-  
+
 
 show the edit commands offered
   $ HGEDITOR=cat hg histedit 177f92b77385
   pick 177f92b77385 2 c
   pick 055a42cdd887 3 d
   pick e860deea161a 4 e
   pick 652413bf663e 5 f
-  
+
+  # Edit history between 177f92b77385 and 652413bf663e
+  #
+  # Commits are listed from least to most recent
+  #
+  # You can reorder changesets by reordering the lines
+  #
+  # Commands:
+  #
+  #  e, edit = use commit, but stop for amending
+  #  m, mess = edit commit message without changing commit content
+  #  p, pick = use commit
+  #  b, base = checkout changeset and apply further changesets from there
+  #  d, drop = remove commit from history
+  #  f, fold = use commit, but combine it with the one above
+  #  r, roll = like fold, but discard this commit's description and date
+  #
+
+test customization of revision summary
+  $ HGEDITOR=cat hg histedit 177f92b77385 \
+  >  --config histedit.summary-template='I am rev {rev} desc {desc} tags {tags}'
+  pick 177f92b77385 I am rev 2 desc c tags
+  pick 055a42cdd887 I am rev 3 desc d tags
+  pick e860deea161a I am rev 4 desc e tags
+  pick 652413bf663e I am rev 5 desc f tags tip
+
   # Edit history between 177f92b77385 and 652413bf663e
   #
   # Commits are listed from least to most recent
@@ -140,7 +165,7 @@
      user:        test
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     a
-  
+
 
 put things back
 
@@ -182,7 +207,7 @@
      user:        test
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     a
-  
+
 
 slightly different this time
 
@@ -223,7 +248,7 @@
      user:        test
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     a
-  
+
 
 keep prevents stripping dead revs
   $ hg histedit 799205341b6b --keep --commands - 2>&1 << EOF | fixbundle
@@ -274,7 +299,7 @@
      user:        test
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     a
-  
+
 
 try with --rev
   $ hg histedit --commands - --rev -2 2>&1 <<EOF | fixbundle
@@ -325,7 +350,7 @@
      user:        test
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     a
-  
+
 Verify that revsetalias entries work with histedit:
   $ cat >> $HGRCPATH <<EOF
   > [revsetalias]
@@ -337,7 +362,7 @@
   pick ece0b8d93dda 6 c
   pick 803ef1c6fcfd 7 e
   pick 9c863c565126 8 extra commit to c
-  
+
   # Edit history between ece0b8d93dda and 9c863c565126
   #
   # Commits are listed from least to most recent
@@ -383,7 +408,7 @@
      user:        Robert Altman <robert.altman at telventDTN.com>
      date:        Mon Nov 28 16:35:28 2011 +0000
      summary:     Checked in text file
-  
+
   $ hg histedit 0
   $ cd ..
 
@@ -432,7 +457,7 @@
   pick b0f4233702ca 0 initial commit
   fold 5e8704a8f2d2 1 moved and changed
   pick 40e7299e8fa7 2 renamed
-  
+
   diff --git a/another-dir/initial-file b/another-dir/initial-file
   new file mode 100644
   --- /dev/null
@@ -448,7 +473,7 @@
   # Node ID 9b730d82b00af8a2766facebfa47cc124405a118
   # Parent  fffadc26f8f85623ce60b028a3f1ccc3730f8530
   renamed
-  
+
   diff --git a/another-dir/initial-file b/another-dir/renamed-file
   rename from another-dir/initial-file
   rename to another-dir/renamed-file
diff --git a/mercurial/help.py b/mercurial/help.py
--- a/mercurial/help.py
+++ b/mercurial/help.py
@@ -394,7 +394,17 @@
 def addtopichook(topic, rewriter):
     helphooks.setdefault(topic, []).append(rewriter)
 
-def makeitemsdoc(ui, topic, doc, marker, items, dedent=False):
+def _templateextsyms(ui, topic, doc):
+    for name, ext in extensions.extensions(ui):
+        kw = getattr(ext, 'templatekeyword', None)
+        if kw is not None:
+            doc = addtopicsymbols(
+                'templates', 'Filters\n=======', kw, keepmarker=True)
+    return doc
+
+addtopichook('templating', _templateextsyms)
+
+def makeitemsdoc(ui, topic, doc, marker, items, dedent=False, keepmarker=False):
     """Extract docstring from the items key to function mapping, build a
     single documentation block and use it to overwrite the marker in doc.
     """
@@ -420,11 +430,14 @@
                 doclines.append('  ' + l.strip())
         entries.append('\n'.join(doclines))
     entries = '\n\n'.join(entries)
+    if keepmarker:
+        entries = entries + '\n\n' + marker
     return doc.replace(marker, entries)
 
-def addtopicsymbols(topic, marker, symbols, dedent=False):
+def addtopicsymbols(topic, marker, symbols, dedent=False, keepmarker=False):
     def add(ui, topic, doc):
-        return makeitemsdoc(ui, topic, doc, marker, symbols, dedent=dedent)
+        return makeitemsdoc(ui, topic, doc, marker, symbols, dedent=dedent,
+                            keepmarker=keepmarker)
     addtopichook(topic, add)
 
 addtopicsymbols('bundlespec', '.. bundlecompressionmarker',
diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -156,6 +156,15 @@
   [histedit]
   linelen = 120      # truncate rule lines at 120 characters
 
+The summary of a change can be customized as well::
+
+  [histedit]
+  summary-template = '{rev} {bookmarks} {desc|firstline}'
+
+The customized summary should be kept short enough that rule lines
+will fit in the configured line length. See above if that requires
+customization.
+
 ``hg histedit`` attempts to automatically choose an appropriate base
 revision to use. To change which base revision is used, define a
 revset in your configuration file::
@@ -217,6 +226,7 @@
     repair,
     scmutil,
     state as statemod,
+    templatekw,
     util,
 )
 from mercurial.utils import (
@@ -248,6 +258,8 @@
 configitem('ui', 'interface.histedit',
     default=None,
 )
+configitem('histedit', 'summary-template',
+           default='{rev} {desc|firstline}')
 
 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
@@ -480,8 +492,11 @@
         <hash> <rev> <summary>
         """
         ctx = self.repo[self.node]
-        summary = _getsummary(ctx)
-        line = '%s %s %d %s' % (self.verb, ctx, ctx.rev(), summary)
+        ui = self.repo.ui
+        summary = cmdutil.rendertemplate(
+            ctx, ui.config('histedit', 'summary-template')) or ''
+        summary = summary.splitlines()[0]
+        line = '%s %s %s' % (self.verb, ctx, summary)
         # trim to 75 columns by default so it's not stupidly wide in my editor
         # (the 5 more are left for verb)
         maxlen = self.repo.ui.configint('histedit', 'linelen')



To: durin42, #hg-reviewers
Cc: yuja, mercurial-devel


More information about the Mercurial-devel mailing list