def clone(self):
        """todo: Docstring for clone
        :return:
        :rtype:
        """
        logger.debug("")
    
        if not self.url:
            estr = "Cannot install this repos without a URL. %s" % self.info()
            logger.warning(estr)
            raise ValueError(estr)

        # check if the already exists, if so, don't install, update it?
        url = urlparse(self.url)
        url_path = url[2]
        path_end = url_path.split('/')
        path_end = path_end[len(path_end) - 1]

        if url.scheme not in self.supported_schemes:
            raise ValueError("Unsupported scheme '{}' for {}".format(url.scheme, self.url))

        assert self.repo_dir, "Invalid repo directory."

        # Clone it.
        logger.debug("cloning %s into %s .", self.url, self.repo_dir)
        self.pr_pass("\nInstalling %s ... " % self.url)

        p = git.clone('--progress', self.url, self.repo_dir,
                      _out=self._sh_stdout('blue'), _err=self._sh_stderr('blue'))
        p.wait()