def find_file(self, path, tgt_env):
        '''
        Find the specified file in the specified environment
        '''
        tree = self.get_tree(tgt_env)
        if not tree:
            # Branch/tag/SHA not found
            return None, None
        blob = None
        depth = 0
        while True:
            depth += 1
            if depth > SYMLINK_RECURSE_DEPTH:
                break
            prefix_dirs, _, filename = path.rpartition(os.path.sep)
            tree = self.walk_tree(tree, prefix_dirs)
            if not isinstance(tree, dulwich.objects.Tree):
                # Branch/tag/SHA not found in repo
                break
            try:
                mode, oid = tree[filename]
                if stat.S_ISLNK(mode):
                    # Path is a symlink. The blob data corresponding to
                    # this path's object ID will be the target of the
                    # symlink. Follow the symlink and set path to the
                    # location indicated in the blob data.
                    link_tgt = self.repo.get_object(oid).as_raw_string()
                    path = os.path.normpath(
                        os.path.join(os.path.dirname(path), link_tgt)
                    )
                else:
                    blob = self.repo.get_object(oid)
                    break
            except __HOLE__:
                break
        return blob, blob.sha().hexdigest() if blob is not None else blob
dataset/ETHPy150Open saltstack/salt/salt/utils/gitfs.py/Dulwich.find_file