def walk(self, relpath, topdown=True):
    for root, dirs, files in self._walk_raw(relpath, topdown):
      matched_dirs = self.ignore.match_files([os.path.join(root, "{}/".format(d)) for d in dirs])
      matched_files = self.ignore.match_files([os.path.join(root, f) for f in files])
      for matched_dir in matched_dirs:
        dirs.remove(fast_relpath(matched_dir, root).rstrip('/'))

      for matched_file in matched_files:
        files.remove(fast_relpath(matched_file, root))

      yield root, dirs, files
Walk the file tree rooted at `path`.  Works like os.walk but returned root value is relative path.
dataset/ETHPy150Open pantsbuild/pants/src/python/pants/base/project_tree.py/ProjectTree.walk