Patchwork [2,of,2] config: highlight parse error caused by leading spaces (issue3214)

login
register
mail settings
Submitter Pierre-Yves David
Date Aug. 21, 2014, 6:13 a.m.
Message ID <558fc3cc3194e4a3c8af.1408601623@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/5546/
State Accepted
Headers show

Comments

Pierre-Yves David - Aug. 21, 2014, 6:13 a.m.
# HG changeset patch
# User Razvan Cojocaru <razvan.cojocaru93@gmail.com>
# Date 1394983891 -7200
#      Sun Mar 16 17:31:31 2014 +0200
# Node ID 558fc3cc3194e4a3c8afa35dc6e234a47467bba9
# Parent  b09526f454bd930d851963bda21227f9932bccf8
config: highlight parse error caused by leading spaces (issue3214)

Added "Unexpected leading whitespace" message to parse error
when .hgrc has a line that starts with whitespace.
Helps new users unfamiliar with syntax of rc file.
Augie Fackler - Aug. 23, 2014, 7:13 p.m.
On Wed, Aug 20, 2014 at 11:13:43PM -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Razvan Cojocaru <razvan.cojocaru93@gmail.com>
> # Date 1394983891 -7200
> #      Sun Mar 16 17:31:31 2014 +0200
> # Node ID 558fc3cc3194e4a3c8afa35dc6e234a47467bba9
> # Parent  b09526f454bd930d851963bda21227f9932bccf8
> config: highlight parse error caused by leading spaces (issue3214)

queued, thanks

>
> Added "Unexpected leading whitespace" message to parse error
> when .hgrc has a line that starts with whitespace.
> Helps new users unfamiliar with syntax of rc file.
>
> diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
> --- a/mercurial/dispatch.py
> +++ b/mercurial/dispatch.py
> @@ -56,10 +56,12 @@ def dispatch(req):
>          return -1
>      except error.ParseError, inst:
>          if len(inst.args) > 1:
>              ferr.write(_("hg: parse error at %s: %s\n") %
>                               (inst.args[1], inst.args[0]))
> +            if (inst.args[0][0] == ' '):
> +                ferr.write(_("Unexpected leading whitespace\n"))
>          else:
>              ferr.write(_("hg: parse error: %s\n") % inst.args[0])
>          return -1
>
>      msg = ' '.join(' ' in a and repr(a) or a for a in req.args)
> @@ -153,10 +155,12 @@ def _runcatch(req):
>                  (inst.args[0], " ".join(inst.args[1])))
>      except error.ParseError, inst:
>          if len(inst.args) > 1:
>              ui.warn(_("hg: parse error at %s: %s\n") %
>                               (inst.args[1], inst.args[0]))
> +            if (inst.args[0][0] == ' '):
> +                ui.warn(_("unexpected leading whitespace\n"))
>          else:
>              ui.warn(_("hg: parse error: %s\n") % inst.args[0])
>          return -1
>      except error.LockHeld, inst:
>          if inst.errno == errno.ETIMEDOUT:
> diff --git a/tests/test-config.t b/tests/test-config.t
> --- a/tests/test-config.t
> +++ b/tests/test-config.t
> @@ -17,10 +17,29 @@ Invalid syntax: no key
>    > EOF
>    $ hg showconfig
>    hg: parse error at $TESTTMP/.hg/hgrc:1: =nokeyvalue
>    [255]
>
> +Test hint about invalid syntax from leading white space
> +
> +  $ cat > .hg/hgrc << EOF
> +  >  key=value
> +  > EOF
> +  $ hg showconfig
> +  hg: parse error at $TESTTMP/.hg/hgrc:1:  key=value
> +  unexpected leading whitespace
> +  [255]
> +
> +  $ cat > .hg/hgrc << EOF
> +  >  [section]
> +  > key=value
> +  > EOF
> +  $ hg showconfig
> +  hg: parse error at $TESTTMP/.hg/hgrc:1:  [section]
> +  unexpected leading whitespace
> +  [255]
> +
>  reset hgrc
>
>    $ echo > .hg/hgrc
>
>  Test case sensitive configuration
> diff --git a/tests/test-hgrc.t b/tests/test-hgrc.t
> --- a/tests/test-hgrc.t
> +++ b/tests/test-hgrc.t
> @@ -41,10 +41,11 @@ issue1829: wrong indentation
>
>    $ echo '[foo]' > $HGRC
>    $ echo '  x = y' >> $HGRC
>    $ hg version
>    hg: parse error at $TESTTMP/hgrc:2:   x = y
> +  Unexpected leading whitespace
>    [255]
>
>    $ python -c "print '[foo]\nbar = a\n b\n c \n  de\n fg \nbaz = bif cb \n'" \
>    > > $HGRC
>    $ hg showconfig foo
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -56,10 +56,12 @@  def dispatch(req):
         return -1
     except error.ParseError, inst:
         if len(inst.args) > 1:
             ferr.write(_("hg: parse error at %s: %s\n") %
                              (inst.args[1], inst.args[0]))
+            if (inst.args[0][0] == ' '):
+                ferr.write(_("Unexpected leading whitespace\n"))
         else:
             ferr.write(_("hg: parse error: %s\n") % inst.args[0])
         return -1
 
     msg = ' '.join(' ' in a and repr(a) or a for a in req.args)
@@ -153,10 +155,12 @@  def _runcatch(req):
                 (inst.args[0], " ".join(inst.args[1])))
     except error.ParseError, inst:
         if len(inst.args) > 1:
             ui.warn(_("hg: parse error at %s: %s\n") %
                              (inst.args[1], inst.args[0]))
+            if (inst.args[0][0] == ' '):
+                ui.warn(_("unexpected leading whitespace\n"))
         else:
             ui.warn(_("hg: parse error: %s\n") % inst.args[0])
         return -1
     except error.LockHeld, inst:
         if inst.errno == errno.ETIMEDOUT:
diff --git a/tests/test-config.t b/tests/test-config.t
--- a/tests/test-config.t
+++ b/tests/test-config.t
@@ -17,10 +17,29 @@  Invalid syntax: no key
   > EOF
   $ hg showconfig
   hg: parse error at $TESTTMP/.hg/hgrc:1: =nokeyvalue
   [255]
 
+Test hint about invalid syntax from leading white space
+
+  $ cat > .hg/hgrc << EOF
+  >  key=value
+  > EOF
+  $ hg showconfig
+  hg: parse error at $TESTTMP/.hg/hgrc:1:  key=value
+  unexpected leading whitespace
+  [255]
+
+  $ cat > .hg/hgrc << EOF
+  >  [section]
+  > key=value
+  > EOF
+  $ hg showconfig
+  hg: parse error at $TESTTMP/.hg/hgrc:1:  [section]
+  unexpected leading whitespace
+  [255]
+
 reset hgrc
 
   $ echo > .hg/hgrc
 
 Test case sensitive configuration
diff --git a/tests/test-hgrc.t b/tests/test-hgrc.t
--- a/tests/test-hgrc.t
+++ b/tests/test-hgrc.t
@@ -41,10 +41,11 @@  issue1829: wrong indentation
 
   $ echo '[foo]' > $HGRC
   $ echo '  x = y' >> $HGRC
   $ hg version
   hg: parse error at $TESTTMP/hgrc:2:   x = y
+  Unexpected leading whitespace
   [255]
 
   $ python -c "print '[foo]\nbar = a\n b\n c \n  de\n fg \nbaz = bif cb \n'" \
   > > $HGRC
   $ hg showconfig foo