getconfig: show error message for varexpand fail
authorZac Medico <zmedico@gentoo.org>
Sat, 31 Mar 2012 21:17:23 +0000 (14:17 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 31 Mar 2012 21:17:23 +0000 (14:17 -0700)
pym/portage/util/__init__.py

index a7bc9bd0f4e9a2384f01cbb8a32b798dc44e5502..3e7187cfdf100ec52e8ac4e8df1ad3589e2d463c 100644 (file)
@@ -636,7 +636,8 @@ def getconfig(mycfg, tolerant=0, allow_sourcing=False, expand=True):
                                continue
 
                        if expand:
-                               mykeys[key] = varexpand(val, expand_map)
+                               mykeys[key] = varexpand(val, mydict=expand_map,
+                                       error_leader=lex.error_leader)
                                expand_map[key] = mykeys[key]
                        else:
                                mykeys[key] = val
@@ -647,8 +648,9 @@ def getconfig(mycfg, tolerant=0, allow_sourcing=False, expand=True):
        return mykeys
 
 _varexpand_word_chars = frozenset(string.ascii_letters + string.digits + "_")
+_varexpand_unexpected_eof_msg = "unexpected EOF while looking for matching `}'"
 
-def varexpand(mystring, mydict=None):
+def varexpand(mystring, mydict=None, error_leader=None):
        if mydict is None:
                mydict = {}
 
@@ -720,6 +722,10 @@ def varexpand(mystring, mydict=None):
                                while mystring[pos] in _varexpand_word_chars:
                                        if (pos+1)>=len(mystring):
                                                if braced:
+                                                       msg = _varexpand_unexpected_eof_msg
+                                                       if error_leader is not None:
+                                                               msg = error_leader() + msg
+                                                       writemsg(msg + "\n", noiselevel=-1)
                                                        return ""
                                                else:
                                                        pos=pos+1
@@ -728,10 +734,21 @@ def varexpand(mystring, mydict=None):
                                myvarname=mystring[myvstart:pos]
                                if braced:
                                        if mystring[pos]!="}":
+                                               msg = _varexpand_unexpected_eof_msg
+                                               if error_leader is not None:
+                                                       msg = error_leader() + msg
+                                               writemsg(msg + "\n", noiselevel=-1)
                                                return ""
                                        else:
                                                pos=pos+1
                                if len(myvarname)==0:
+                                       msg = "$"
+                                       if braced:
+                                               msg += "{}"
+                                       msg += ": bad substitution"
+                                       if error_leader is not None:
+                                               msg = error_leader() + msg
+                                       writemsg(msg + "\n", noiselevel=-1)
                                        return ""
                                numvars=numvars+1
                                if myvarname in mydict: