def CopyDirectory(source_dir, target_dir, override=False):
_AssertIsLocal(source_dir)<EOL>_AssertIsLocal(target_dir)<EOL>if override and IsDir(target_dir):<EOL><INDENT>DeleteDirectory(target_dir, skip_on_error=False)<EOL><DEDENT>import shutil<EOL>shutil.copytree(source_dir, target_dir)<EOL>
Recursively copy a directory tree.

:param unicode source_dir:
    Where files will come from

:param unicode target_dir:
    Where files will go to

:param bool override:
    If True and target_dir already exists, it will be deleted before copying.

:raises NotImplementedForRemotePathError:
    If trying to copy to/from remote directories