@@ -391,7 +391,7 @@ def get(self, name, default=None):
391
391
return os .environ .get (name , default )
392
392
self ._lookupstack .append (name )
393
393
try :
394
- self .resolved [name ] = res = self .reader ._replace (val )
394
+ self .resolved [name ] = res = self .reader ._replace (val , name = "setenv" )
395
395
finally :
396
396
self ._lookupstack .pop ()
397
397
return res
@@ -1693,7 +1693,7 @@ def getbool(self, name, default=None, replace=True):
1693
1693
1694
1694
def getargvlist (self , name , default = "" , replace = True ):
1695
1695
s = self .getstring (name , default , replace = False )
1696
- return _ArgvlistReader .getargvlist (self , s , replace = replace )
1696
+ return _ArgvlistReader .getargvlist (self , s , replace = replace , name = name )
1697
1697
1698
1698
def getargv (self , name , default = "" , replace = True ):
1699
1699
return self .getargvlist (name , default , replace = replace )[0 ]
@@ -1712,7 +1712,7 @@ def getargv_install_command(self, name, default="", replace=True):
1712
1712
if "{opts}" in s :
1713
1713
s = s .replace ("{opts}" , r"\{opts\}" )
1714
1714
1715
- return _ArgvlistReader .getargvlist (self , s , replace = replace )[0 ]
1715
+ return _ArgvlistReader .getargvlist (self , s , replace = replace , name = name )[0 ]
1716
1716
1717
1717
def getstring (self , name , default = None , replace = True , crossonly = False , no_fallback = False ):
1718
1718
x = None
@@ -1775,6 +1775,7 @@ def _replace(self, value, name=None, section_name=None, crossonly=False):
1775
1775
return value
1776
1776
1777
1777
section_name = section_name if section_name else self .section_name
1778
+ assert name
1778
1779
self ._subststack .append ((section_name , name ))
1779
1780
try :
1780
1781
replaced = Replacer (self , crossonly = crossonly ).do_replace (value )
@@ -1890,7 +1891,7 @@ def _substitute_from_other_section(self, key):
1890
1891
cfg = self .reader ._cfg
1891
1892
if section in cfg and item in cfg [section ]:
1892
1893
if (section , item ) in self .reader ._subststack :
1893
- raise ValueError (
1894
+ raise tox . exception . SubstitutionStackError (
1894
1895
"{} already in {}" .format ((section , item ), self .reader ._subststack ),
1895
1896
)
1896
1897
x = str (cfg [section ][item ])
@@ -1918,7 +1919,7 @@ def is_interactive():
1918
1919
1919
1920
class _ArgvlistReader :
1920
1921
@classmethod
1921
- def getargvlist (cls , reader , value , replace = True ):
1922
+ def getargvlist (cls , reader , value , replace = True , name = None ):
1922
1923
"""Parse ``commands`` argvlist multiline string.
1923
1924
1924
1925
:param SectionReader reader: reader to be used.
@@ -1940,10 +1941,10 @@ def getargvlist(cls, reader, value, replace=True):
1940
1941
current_command += line
1941
1942
1942
1943
if is_section_substitution (current_command ):
1943
- replaced = reader ._replace (current_command , crossonly = True )
1944
- commands .extend (cls .getargvlist (reader , replaced ))
1944
+ replaced = reader ._replace (current_command , crossonly = True , name = name )
1945
+ commands .extend (cls .getargvlist (reader , replaced , name = name ))
1945
1946
else :
1946
- commands .append (cls .processcommand (reader , current_command , replace ))
1947
+ commands .append (cls .processcommand (reader , current_command , replace , name = name ))
1947
1948
current_command = ""
1948
1949
else :
1949
1950
if current_command :
@@ -1956,7 +1957,7 @@ def getargvlist(cls, reader, value, replace=True):
1956
1957
return commands
1957
1958
1958
1959
@classmethod
1959
- def processcommand (cls , reader , command , replace = True ):
1960
+ def processcommand (cls , reader , command , replace = True , name = None ):
1960
1961
# Iterate through each word of the command substituting as
1961
1962
# appropriate to construct the new command string. This
1962
1963
# string is then broken up into exec argv components using
@@ -1969,8 +1970,8 @@ def processcommand(cls, reader, command, replace=True):
1969
1970
continue
1970
1971
1971
1972
new_arg = ""
1972
- new_word = reader ._replace (word )
1973
- new_word = reader ._replace (new_word )
1973
+ new_word = reader ._replace (word , name = name )
1974
+ new_word = reader ._replace (new_word , name = name )
1974
1975
new_word = Replacer ._unescape (new_word )
1975
1976
new_arg += new_word
1976
1977
newcommand += new_arg
0 commit comments