Circular include detection
This commit is contained in:
10
minheader.py
10
minheader.py
@@ -58,10 +58,11 @@ class MinHeader(object):
|
|||||||
def Minify(self, path):
|
def Minify(self, path):
|
||||||
self._Log('%s:\n' % path)
|
self._Log('%s:\n' % path)
|
||||||
known_required = set()
|
known_required = set()
|
||||||
while self._MinifyPass(path, known_required):
|
split = set()
|
||||||
|
while self._MinifyPass(path, known_required, split):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _MinifyPass(self, path, known_required):
|
def _MinifyPass(self, path, known_required, split):
|
||||||
lines = self._LoadFile(path)
|
lines = self._LoadFile(path)
|
||||||
includes = self._FindIncludes(lines)
|
includes = self._FindIncludes(lines)
|
||||||
for inc_i, inc_path in includes:
|
for inc_i, inc_path in includes:
|
||||||
@@ -80,8 +81,12 @@ class MinHeader(object):
|
|||||||
if self._TestReplacement(path, lines, inc_i, []):
|
if self._TestReplacement(path, lines, inc_i, []):
|
||||||
self._Log('UNUSED\n')
|
self._Log('UNUSED\n')
|
||||||
return True
|
return True
|
||||||
|
elif set(sub_includes) & split:
|
||||||
|
self._Log('CIRCULAR\n')
|
||||||
|
continue
|
||||||
elif self._TestReplacement(path, lines, inc_i, sub_includes):
|
elif self._TestReplacement(path, lines, inc_i, sub_includes):
|
||||||
self._Log('OVERBROAD\n')
|
self._Log('OVERBROAD\n')
|
||||||
|
split.add(inc_path)
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self._Log('REQUIRED\n')
|
self._Log('REQUIRED\n')
|
||||||
@@ -116,6 +121,7 @@ class MinHeader(object):
|
|||||||
return False
|
return False
|
||||||
except:
|
except:
|
||||||
self._WriteFile(path, lines)
|
self._WriteFile(path, lines)
|
||||||
|
raise
|
||||||
|
|
||||||
def _FindIncludes(self, lines):
|
def _FindIncludes(self, lines):
|
||||||
ret = []
|
ret = []
|
||||||
|
|||||||
Reference in New Issue
Block a user