aboutsummaryrefslogtreecommitdiffstats
path: root/testcase/tools/findleaves.py
diff options
context:
space:
mode:
Diffstat (limited to 'testcase/tools/findleaves.py')
-rwxr-xr-xtestcase/tools/findleaves.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/testcase/tools/findleaves.py b/testcase/tools/findleaves.py
index 72cc024..f152a87 100755
--- a/testcase/tools/findleaves.py
+++ b/testcase/tools/findleaves.py
@@ -26,6 +26,7 @@ import sys
def perform_find(mindepth, prune, dirlist, filenames):
result = []
pruneleaves = set(map(lambda x: os.path.split(x)[1], prune))
+ seen = set()
for rootdir in dirlist:
rootdepth = rootdir.count("/")
for root, dirs, files in os.walk(rootdir, followlinks=True):
@@ -52,6 +53,18 @@ def perform_find(mindepth, prune, dirlist, filenames):
if filename in files:
result.append(os.path.join(root, filename))
del dirs[:]
+
+ # filter out inodes that have already been seen due to symlink loops
+ i = 0
+ while i < len(dirs):
+ st = os.stat(os.path.join(root, dirs[i]))
+ key = (st.st_dev, st.st_ino)
+ if key in seen:
+ del dirs[i]
+ else:
+ i += 1
+ seen.add(key)
+
return result
def usage():