Patchwork [V3] histedit: add a config allowing changing histedit rule line length limit

login
register
mail settings
Submitter Mateusz Kwapich
Date Feb. 27, 2015, 2:02 a.m.
Message ID <f7f14d07b00b0e1ae782.1425002550@dev1429.prn1.facebook.com>
Download mbox | patch
Permalink /patch/7845/
State Superseded
Commit 4047982904f8b14255c2bdbf1b37e3c25e960777
Headers show

Comments

Mateusz Kwapich - Feb. 27, 2015, 2:02 a.m.
# HG changeset patch
# User Mateusz Kwapich <mitrandir@fb.com>
# Date 1421880324 28800
#      Wed Jan 21 14:45:24 2015 -0800
# Node ID f7f14d07b00b0e1ae7821d0379d1cc79967123c8
# Parent  ff5caa8dfd993680d9602ca6ebb14da9de10d5f4
histedit: add a config allowing changing histedit rule line length limit

Since many users are using terminals wider than 80 chars there should be an
option to have longer lines in histedit editor.

Even if the summary line is shorter than 80 chars after adding action line
prefixes (like "pick 7c2fd3b9020c") it doesn't fit there anymore. Setting
it to for example 110 would be a  nice option to have.
Augie Fackler - Feb. 27, 2015, 8:38 p.m.
On Thu, Feb 26, 2015 at 06:02:30PM -0800, Mateusz Kwapich wrote:
> # HG changeset patch
> # User Mateusz Kwapich <mitrandir@fb.com>
> # Date 1421880324 28800
> #      Wed Jan 21 14:45:24 2015 -0800
> # Node ID f7f14d07b00b0e1ae7821d0379d1cc79967123c8
> # Parent  ff5caa8dfd993680d9602ca6ebb14da9de10d5f4
> histedit: add a config allowing changing histedit rule line length limit

Good enough, queued. I'd appreciate a followup with a test, but that's
fine as a followup.

>
> Since many users are using terminals wider than 80 chars there should be an
> option to have longer lines in histedit editor.
>
> Even if the summary line is shorter than 80 chars after adding action line
> prefixes (like "pick 7c2fd3b9020c") it doesn't fit there anymore. Setting
> it to for example 110 would be a  nice option to have.
>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -142,6 +142,13 @@ If you run ``hg histedit --outgoing`` on
>  as running ``hg histedit 836302820282``. If you need plan to push to a
>  repository that Mercurial does not detect to be related to the source
>  repo, you can add a ``--force`` option.
> +
> +Histedit rule lines are truncated to 80 characters by default. You
> +can customise this behaviour by setting a different length in your
> +configuration file:
> +
> +[histedit]
> +linelen = 120      # truncate rule lines at 120 characters
>  """
>
>  try:
> @@ -638,7 +645,7 @@ def _histedit(ui, repo, state, *freeargs
>
>          ctxs = [repo[r] for r in revs]
>          if not rules:
> -            rules = '\n'.join([makedesc(c) for c in ctxs])
> +            rules = '\n'.join([makedesc(ui, c) for c in ctxs])
>              rules += '\n\n'
>              rules += editcomment % (node.short(root), node.short(topmost))
>              rules = ui.edit(rules, ui.username())
> @@ -805,7 +812,7 @@ def between(repo, old, new, keep):
>              raise util.Abort(_('cannot edit immutable changeset: %s') % root)
>      return [c.node() for c in ctxs]
>
> -def makedesc(c):
> +def makedesc(ui, c):
>      """build a initial action line for a ctx `c`
>
>      line are in the form:
> @@ -817,7 +824,9 @@ def makedesc(c):
>          summary = c.description().splitlines()[0]
>      line = 'pick %s %d %s' % (c, c.rev(), summary)
>      # trim to 80 columns so it's not stupidly wide in my editor
> -    return util.ellipsis(line, 80)
> +    maxlen = ui.configint('histedit', 'linelen', default=80)
> +    maxlen = max(maxlen, 22) # avoid truncating hash
> +    return util.ellipsis(line, maxlen)
>
>  def verifyrules(rules, repo, ctxs):
>      """Verify that there exists exactly one edit rule per given changeset.
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
Augie Fackler - Feb. 27, 2015, 8:44 p.m.
On Thu, Feb 26, 2015 at 06:02:30PM -0800, Mateusz Kwapich wrote:
> # HG changeset patch
> # User Mateusz Kwapich <mitrandir@fb.com>
> # Date 1421880324 28800
> #      Wed Jan 21 14:45:24 2015 -0800
> # Node ID f7f14d07b00b0e1ae7821d0379d1cc79967123c8
> # Parent  ff5caa8dfd993680d9602ca6ebb14da9de10d5f4
> histedit: add a config allowing changing histedit rule line length limit

Please rebase this against crew and send a v4, or wait for mpm to push
and then rebase and send a v4. I'm getting a lot of merge conflicts I
don't have time to sort through right now.

>
> Since many users are using terminals wider than 80 chars there should be an
> option to have longer lines in histedit editor.
>
> Even if the summary line is shorter than 80 chars after adding action line
> prefixes (like "pick 7c2fd3b9020c") it doesn't fit there anymore. Setting
> it to for example 110 would be a  nice option to have.
>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -142,6 +142,13 @@ If you run ``hg histedit --outgoing`` on
>  as running ``hg histedit 836302820282``. If you need plan to push to a
>  repository that Mercurial does not detect to be related to the source
>  repo, you can add a ``--force`` option.
> +
> +Histedit rule lines are truncated to 80 characters by default. You
> +can customise this behaviour by setting a different length in your
> +configuration file:
> +
> +[histedit]
> +linelen = 120      # truncate rule lines at 120 characters
>  """
>
>  try:
> @@ -638,7 +645,7 @@ def _histedit(ui, repo, state, *freeargs
>
>          ctxs = [repo[r] for r in revs]
>          if not rules:
> -            rules = '\n'.join([makedesc(c) for c in ctxs])
> +            rules = '\n'.join([makedesc(ui, c) for c in ctxs])
>              rules += '\n\n'
>              rules += editcomment % (node.short(root), node.short(topmost))
>              rules = ui.edit(rules, ui.username())
> @@ -805,7 +812,7 @@ def between(repo, old, new, keep):
>              raise util.Abort(_('cannot edit immutable changeset: %s') % root)
>      return [c.node() for c in ctxs]
>
> -def makedesc(c):
> +def makedesc(ui, c):
>      """build a initial action line for a ctx `c`
>
>      line are in the form:
> @@ -817,7 +824,9 @@ def makedesc(c):
>          summary = c.description().splitlines()[0]
>      line = 'pick %s %d %s' % (c, c.rev(), summary)
>      # trim to 80 columns so it's not stupidly wide in my editor
> -    return util.ellipsis(line, 80)
> +    maxlen = ui.configint('histedit', 'linelen', default=80)
> +    maxlen = max(maxlen, 22) # avoid truncating hash
> +    return util.ellipsis(line, maxlen)
>
>  def verifyrules(rules, repo, ctxs):
>      """Verify that there exists exactly one edit rule per given changeset.
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -142,6 +142,13 @@  If you run ``hg histedit --outgoing`` on
 as running ``hg histedit 836302820282``. If you need plan to push to a
 repository that Mercurial does not detect to be related to the source
 repo, you can add a ``--force`` option.
+
+Histedit rule lines are truncated to 80 characters by default. You
+can customise this behaviour by setting a different length in your
+configuration file:
+
+[histedit]
+linelen = 120      # truncate rule lines at 120 characters
 """
 
 try:
@@ -638,7 +645,7 @@  def _histedit(ui, repo, state, *freeargs
 
         ctxs = [repo[r] for r in revs]
         if not rules:
-            rules = '\n'.join([makedesc(c) for c in ctxs])
+            rules = '\n'.join([makedesc(ui, c) for c in ctxs])
             rules += '\n\n'
             rules += editcomment % (node.short(root), node.short(topmost))
             rules = ui.edit(rules, ui.username())
@@ -805,7 +812,7 @@  def between(repo, old, new, keep):
             raise util.Abort(_('cannot edit immutable changeset: %s') % root)
     return [c.node() for c in ctxs]
 
-def makedesc(c):
+def makedesc(ui, c):
     """build a initial action line for a ctx `c`
 
     line are in the form:
@@ -817,7 +824,9 @@  def makedesc(c):
         summary = c.description().splitlines()[0]
     line = 'pick %s %d %s' % (c, c.rev(), summary)
     # trim to 80 columns so it's not stupidly wide in my editor
-    return util.ellipsis(line, 80)
+    maxlen = ui.configint('histedit', 'linelen', default=80)
+    maxlen = max(maxlen, 22) # avoid truncating hash
+    return util.ellipsis(line, maxlen)
 
 def verifyrules(rules, repo, ctxs):
     """Verify that there exists exactly one edit rule per given changeset.