'Copies the source directory into the destination.
If the destination exists, the source is copied under it. Otherwise
the destination directory and the possible missing intermediate
directories are created.'

def copy_directory(self, source, destination):

    (source, destination) = self._prepare_copy_and_move_directory(source, destination)
    try:
        shutil.copytree(source, destination)
    except shutil.Error:
        if (not (WINDOWS and JYTHON)):
            raise
    self._link("Copied    directory    from    '%s'    to    '%s'.", source, destination)
