def test_recursion_symlinks(self): workspace = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, workspace) # create two dirs os.makedirs(os.path.join(workspace, 'dir1')) os.makedirs(os.path.join(workspace, 'dir2')) # create cyclical symlinks os.symlink(os.path.join('..', 'dir1'), os.path.join(workspace, 'dir2', 'ldir1')) os.symlink(os.path.join('..', 'dir2'), os.path.join(workspace, 'dir1', 'ldir2')) # create one file in each dir open(os.path.join(workspace, 'dir1', 'f1.txt'), 'a').close() open(os.path.join(workspace, 'dir1', 'ldir2', 'f2.txt'), 'a').close() data = [] def callback(rootdirectory, directory, subdirs, files): for f in files: data.append(f) ManifestParser._walk_directories([workspace], callback) self.assertEqual(sorted(data), ['f1.txt', 'f2.txt'])