Add code to handle errors in .gclient configuration files and output human readble information rather than a raw exception stack.
Review URL: http://codereview.chromium.org/113968
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@17179 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient.py b/gclient.py
index 8646f31..694435c 100755
--- a/gclient.py
+++ b/gclient.py
@@ -940,7 +940,21 @@
def SetConfig(self, content):
self._config_dict = {}
self._config_content = content
- exec(content, self._config_dict)
+ try:
+ exec(content, self._config_dict)
+ except SyntaxError, e:
+ try:
+ # Try to construct a human readable error message
+ error_message = [
+ 'There is a syntax error in your configuration file.',
+ 'Line #%s, character %s:' % (e.lineno, e.offset),
+ '"%s"' % re.sub(r'[\r\n]*$', '', e.text) ]
+ except:
+ # Something went wrong, re-raise the original exception
+ raise e
+ else:
+ # Raise a new exception with the human readable message:
+ raise Error('\n'.join(error_message))
def SaveConfig(self):
FileWrite(os.path.join(self._root_dir, self._options.config_filename),