# HG changeset patch # User Martin von Zweigbergk # Date 1603389431 25200 # Node ID 0883413e09bc23a0a6c5afc3a93c5d678aebef02 # Parent 0fc8b066928addc8270736e7115449efbe5d4872 config: move message about leading spaces in config to config.py When the config parser raises a ParseError, it uses the line that failed to parse as the error message. It doesn't currently tell the user anything about why it failed to parse. b13b99d39a46 (config: highlight parse error caused by leading spaces (issue3214), 2014-03-16) added a checked based on the error *message* having leading spaces. That has worked fine because only the config parser uses the line itself as error message (I think the revset and fileset parsers use more user-friendly proper messages). It still feels like a hack. Let's make the config parser give a useful message about leading whitespace instead. We should ideally follow up with more useful messages for other parse errors in config files. Differential Revision: https://phab.mercurial-scm.org/D9241 diff -r 0fc8b066928a -r 0883413e09bc mercurial/config.py --- a/mercurial/config.py Thu Oct 22 09:58:05 2020 -0700 +++ b/mercurial/config.py Thu Oct 22 10:57:11 2020 -0700 @@ -200,7 +200,10 @@ self._unset.append((section, name)) continue - raise error.ParseError(l.rstrip(), (b"%s:%d" % (src, line))) + message = l.rstrip() + if l.startswith(b' '): + message = b"unexpected leading whitespace: %s" % message + raise error.ParseError(message, (b"%s:%d" % (src, line))) def read(self, path, fp=None, sections=None, remap=None): if not fp: diff -r 0fc8b066928a -r 0883413e09bc mercurial/dispatch.py --- a/mercurial/dispatch.py Thu Oct 22 09:58:05 2020 -0700 +++ b/mercurial/dispatch.py Thu Oct 22 10:57:11 2020 -0700 @@ -248,8 +248,6 @@ _(b"hg: parse error at %s: %s\n") % (pycompat.bytestr(inst.location), inst.message) ) - if inst.message.startswith(b' '): - write(_(b"unexpected leading whitespace\n")) else: write(_(b"hg: parse error: %s\n") % inst.message) _reportsimilar(write, similar) diff -r 0fc8b066928a -r 0883413e09bc tests/test-config.t --- a/tests/test-config.t Thu Oct 22 09:58:05 2020 -0700 +++ b/tests/test-config.t Thu Oct 22 10:57:11 2020 -0700 @@ -25,8 +25,7 @@ > key=value > EOF $ hg showconfig - hg: parse error at $TESTTMP/.hg/hgrc:1: key=value - unexpected leading whitespace + hg: parse error at $TESTTMP/.hg/hgrc:1: unexpected leading whitespace: key=value [255] $ cat > .hg/hgrc << EOF @@ -34,8 +33,7 @@ > key=value > EOF $ hg showconfig - hg: parse error at $TESTTMP/.hg/hgrc:1: [section] - unexpected leading whitespace + hg: parse error at $TESTTMP/.hg/hgrc:1: unexpected leading whitespace: [section] [255] Reset hgrc diff -r 0fc8b066928a -r 0883413e09bc tests/test-hgrc.t --- a/tests/test-hgrc.t Thu Oct 22 09:58:05 2020 -0700 +++ b/tests/test-hgrc.t Thu Oct 22 10:57:11 2020 -0700 @@ -68,8 +68,7 @@ $ echo '[foo]' > $HGRC $ echo ' x = y' >> $HGRC $ hg version - hg: parse error at $TESTTMP/hgrc:2: x = y - unexpected leading whitespace + hg: parse error at $TESTTMP/hgrc:2: unexpected leading whitespace: x = y [255] $ "$PYTHON" -c "from __future__ import print_function; print('[foo]\nbar = a\n b\n c \n de\n fg \nbaz = bif cb \n')" \