def checkout_package(self, package_name):
        """Fetches and checks out the correct version of a package for the rosdistro"""
        pkg_info = self._rosdist.get_package_checkout_info()[package_name]
        repo_url = pkg_info['url']
        name = os.path.basename(pkg_info['url'])
        repo_path = os.path.join(self.workspace, name)
        client = GitClient(repo_path)
        if client.path_exists():
            tag = pkg_info['version'] if client.is_tag(
                pkg_info['version']) else pkg_info['full_version']
            if client.get_url() == repo_url:
                # Sometimes debian/rules gets mussed with in the build process.
                # This should translate to 'git checkout debian/rules' which should reset so we can change tags
                client.update('debian/rules', verbose=True)
                updated = client.update(tag, force_fetch=True, verbose=True)
            if not updated:
                print(
                    "WARNING: Repo at %s changed url from %s to %s or update failed. Redownloading!"
                    % (repo_path, client.get_url(), repo_url))
                shutil.rmtree(repo_path)
                self.fetch_with_tagcheck(client, pkg_info)

        else:
            self.fetch_with_tagcheck(client, pkg_info)

        return repo_path
Exemple #2
0
    def _get_file(self, repo_type, repo_url, version, filename):
        """ Fetch the file specificed by filename relative to the root of the repository"""
        name = simplify_repo_name(repo_url)
        repo_path = os.path.join(self._cache_location, name)
        #client = VcsClient(repo_type, repo_path)
        client = GitClient(repo_path)  # using git only
        updated = False
        if client.path_exists():
            if client.get_url() == repo_url:
                if not self._skip_update:
                    updated = client.update(version, force_fetch=True)
                else:
                    updated = client._do_update(version)
            if not updated:
                shutil.rmtree(repo_path)
        if not updated:
            updated = client.checkout(repo_url, version, shallow=True)

        if not updated:
            raise VcsError("Impossible to update/checkout repo '%s' with version '%s'." % (repo_url, version))

        full_filename = os.path.join(repo_path, filename)
        if not os.path.exists(full_filename):
            raise VcsError("Requested file '%s' missing from repo '%s' version '%s' (viewed at version '%s').  It was expected at: %s" %
                           (filename, repo_url, version, client.get_version(), full_filename))

        return full_filename
    def _get_file(self, _repo_type, repo_url, version, filename):
        """ Fetch the file specificed by filename relative to the root of the repository"""
        name = simplify_repo_name(repo_url)
        repo_path = os.path.join(self._cache_location, name)
        client = GitClient(repo_path)  # using git only
        updated = False
        if client.path_exists():
            if client.get_url() == repo_url:
                if not self._skip_update:
                    logging.disable(logging.WARNING)
                    updated = client.update(version, force_fetch=True)
                    logging.disable(logging.NOTSET)
                else:
                    try:  # catch exception which can be caused by calling internal API
                        logging.disable(logging.WARNING)
                        updated = client._do_update(version)
                        logging.disable(logging.NOTSET)
                    except GitError:
                        updated = False
            if not updated:
                shutil.rmtree(repo_path)
        if not updated:
            logging.disable(logging.WARNING)
            updated = client.checkout(repo_url, version)
            logging.disable(logging.NOTSET)

        if not updated:
            raise VcsError("Impossible to update/checkout repo '%s' with version '%s'." % (repo_url, version))

        full_filename = os.path.join(repo_path, filename)
        if not os.path.exists(full_filename):
            raise VcsError("Requested file '%s' missing from repo '%s' version '%s' (viewed at version '%s').  It was expected at: %s" %
                           (filename, repo_url, version, client.get_version(), full_filename))

        return full_filename
    def test_get_url_by_reading(self):
        from vcstools.git import GitClient

        client = GitClient(self.readonly_path)
        self.assertTrue(client.path_exists())
        self.assertTrue(client.detect_presence())
        self.assertEqual(client.get_url(), self.readonly_url)
        self.assertEqual(client.get_version(), self.readonly_version)
        self.assertEqual(client.get_version(self.readonly_version_init[0:6]), self.readonly_version_init)
        self.assertEqual(client.get_version("test_tag"), self.readonly_version_init)
    def test_get_url_by_reading(self):
        from vcstools.git import GitClient

        client = GitClient(self.readonly_path)
        self.assertTrue(client.path_exists())
        self.assertTrue(client.detect_presence())
        self.assertEqual(client.get_url(), self.readonly_url)
        self.assertEqual(client.get_version(), self.readonly_version)
        self.assertEqual(client.get_version(self.readonly_version_init[0:6]),
                         self.readonly_version_init)
        self.assertEqual(client.get_version("test_tag"),
                         self.readonly_version_init)
    def test_checkout(self):
        from vcstools.git import GitClient
        directory = tempfile.mkdtemp()
        self.directories["checkout_test"] = directory
        local_path = os.path.join(directory, "ros")
        url = self.readonly_url
        client = GitClient(local_path)
        self.assertFalse(client.path_exists())
        self.assertFalse(client.detect_presence())
        self.assertFalse(client.detect_presence())
        self.assertTrue(client.checkout(url))
        self.assertTrue(client.path_exists())
        self.assertTrue(client.detect_presence())
        self.assertEqual(client.get_path(), local_path)
        self.assertEqual(client.get_url(), url)
        self.assertEqual(client.get_branch(), "master")
        self.assertEqual(client.get_branch_parent(), "master")
        #self.assertEqual(client.get_version(), '-r*')

        shutil.rmtree(directory)
        self.directories.pop("checkout_test")
    def test_checkout(self):
        from vcstools.git import GitClient
        directory = tempfile.mkdtemp()
        self.directories["checkout_test"] = directory
        local_path = os.path.join(directory, "ros")
        url = self.readonly_url
        client = GitClient(local_path)
        self.assertFalse(client.path_exists())
        self.assertFalse(client.detect_presence())
        self.assertFalse(client.detect_presence())
        self.assertTrue(client.checkout(url))
        self.assertTrue(client.path_exists())
        self.assertTrue(client.detect_presence())
        self.assertEqual(client.get_path(), local_path)
        self.assertEqual(client.get_url(), url)
        self.assertEqual(client.get_branch(), "master")
        self.assertEqual(client.get_branch_parent(), "master")
        #self.assertEqual(client.get_version(), '-r*')

        shutil.rmtree(directory)
        self.directories.pop("checkout_test")
Exemple #8
0
    def _get_file(self, _repo_type, repo_url, version, filename):
        """ Fetch the file specificed by filename relative to the root of the repository"""
        name = simplify_repo_name(repo_url)
        repo_path = os.path.join(self._cache_location, name)
        client = GitClient(repo_path)  # using git only
        updated = False
        if client.path_exists():
            if client.get_url() == repo_url:
                if not self._skip_update:
                    logging.disable(logging.WARNING)
                    updated = client.update(version, force_fetch=True)
                    logging.disable(logging.NOTSET)
                else:
                    try:  # catch exception which can be caused by calling internal API
                        logging.disable(logging.WARNING)
                        updated = client._do_update(version)
                        logging.disable(logging.NOTSET)
                    except GitError:
                        updated = False
            if not updated:
                shutil.rmtree(repo_path)
        if not updated:
            logging.disable(logging.WARNING)
            updated = client.checkout(repo_url, version)
            logging.disable(logging.NOTSET)

        if not updated:
            raise VcsError(
                "Impossible to update/checkout repo '%s' with version '%s'." %
                (repo_url, version))

        full_filename = os.path.join(repo_path, filename)
        if not os.path.exists(full_filename):
            raise VcsError(
                "Requested file '%s' missing from repo '%s' version '%s' (viewed at version '%s').  It was expected at: %s"
                % (filename, repo_url, version, client.get_version(),
                   full_filename))

        return full_filename
  def checkout_package(self, package_name):
    """Fetches and checks out the correct version of a package for the rosdistro"""
    pkg_info = self._rosdist.get_package_checkout_info()[package_name]
    repo_url = pkg_info['url']
    name = os.path.basename(pkg_info['url'])
    repo_path = os.path.join(self.workspace, name)
    client = GitClient(repo_path)
    if client.path_exists():
      tag = pkg_info['version'] if client.is_tag(pkg_info['version']) else pkg_info['full_version']
      if client.get_url() == repo_url:
        # Sometimes debian/rules gets mussed with in the build process.
        # This should translate to 'git checkout debian/rules' which should reset so we can change tags
        client.update('debian/rules', verbose=True)
        updated = client.update(tag, force_fetch=True, verbose=True)
      if not updated:
        print("WARNING: Repo at %s changed url from %s to %s or update failed. Redownloading!" % (repo_path, client.get_url(), repo_url))
        shutil.rmtree(repo_path)
        self.fetch_with_tagcheck(client, pkg_info)

    else:
      self.fetch_with_tagcheck(client, pkg_info)

    return repo_path
    def test_checkout_specific_branch_and_update(self):
        from vcstools.git import GitClient
        directory = tempfile.mkdtemp()
        subdir = "checkout_specific_version_test"
        self.directories[subdir] = directory
        local_path = os.path.join(directory, "ros")
        url = self.readonly_url
        branch = "master"
        client = GitClient(local_path)
        self.assertFalse(client.path_exists())
        self.assertFalse(client.detect_presence())
        self.assertTrue(client.checkout(url, branch))
        self.assertTrue(client.path_exists())
        self.assertTrue(client.detect_presence())
        self.assertEqual(client.get_path(), local_path)
        self.assertEqual(client.get_url(), url)
        self.assertEqual(client.get_branch_parent(), branch)

        new_branch = 'master'
        self.assertTrue(client.update(new_branch))
        self.assertEqual(client.get_branch_parent(), new_branch)

        shutil.rmtree(directory)
        self.directories.pop(subdir)
 def test_checkout_specific_branch_and_update(self):
     from vcstools.git import GitClient
     directory = tempfile.mkdtemp()
     subdir = "checkout_specific_version_test"
     self.directories[subdir] = directory
     local_path = os.path.join(directory, "ros")
     url = self.readonly_url
     branch = "master"
     client = GitClient(local_path)
     self.assertFalse(client.path_exists())
     self.assertFalse(client.detect_presence())
     self.assertTrue(client.checkout(url, branch))
     self.assertTrue(client.path_exists())
     self.assertTrue(client.detect_presence())
     self.assertEqual(client.get_path(), local_path)
     self.assertEqual(client.get_url(), url)
     self.assertEqual(client.get_branch_parent(), branch)
     
     new_branch = 'master'
     self.assertTrue(client.update(new_branch))
     self.assertEqual(client.get_branch_parent(), new_branch)
     
     shutil.rmtree(directory)
     self.directories.pop(subdir)
 def test_get_url_nonexistant(self):
     from vcstools.git import GitClient
     local_path = "/tmp/dummy"
     client = GitClient(local_path)
     self.assertEqual(client.get_url(), None)
 def test_get_url_nonexistant(self):
     from vcstools.git import GitClient
     local_path = "/tmp/dummy"
     client = GitClient(local_path)
     self.assertEqual(client.get_url(), None)