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 _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_checkout_master_with_subs(self): url = self.remote_path client = GitClient(self.local_path) subclient = GitClient(self.sublocal_path) subsubclient = GitClient(self.subsublocal_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url)) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEqual(self.version_final, client.get_version()) self.assertTrue(subclient.path_exists()) self.assertTrue(subclient.detect_presence()) self.assertEqual(self.subversion_final, subclient.get_version()) self.assertTrue(subsubclient.path_exists()) self.assertTrue(subsubclient.detect_presence()) self.assertEqual(self.subsubversion_final, subsubclient.get_version())
def test_checkout_master_with_subs(self): url = self.remote_path client = GitClient(self.local_path) subclient = GitClient(self.sublocal_path) subsubclient = GitClient(self.subsublocal_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url)) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEqual(self.version_final, client.get_version()) self.assertTrue(subclient.path_exists()) self.assertTrue(subclient.detect_presence()) self.assertEqual(self.subversion_final, subclient.get_version()) self.assertTrue(subsubclient.path_exists()) self.assertTrue(subsubclient.detect_presence()) self.assertEqual(self.subsubversion_final, subsubclient.get_version())
def test_checkout_branch_with_subs(self): url = self.remote_path client = GitClient(self.local_path) subclient = GitClient(self.sublocal_path) subsubclient = GitClient(self.subsublocal_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, refname='test_branch')) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEqual(self.version_init, client.get_version()) self.assertFalse(subclient.path_exists())
def test_checkout_branch_with_subs(self): url = self.remote_path client = GitClient(self.local_path) subclient = GitClient(self.sublocal_path) subsubclient = GitClient(self.subsublocal_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, version='test_branch')) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEqual(self.version_init, client.get_version()) self.assertFalse(subclient.path_exists())
def test_checkout_specific_version_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 version = self.readonly_version client = GitClient(local_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, version)) 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_version(), version) new_version = self.readonly_version_second self.assertTrue(client.update(new_version)) self.assertEqual(client.get_version(), new_version) shutil.rmtree(directory) self.directories.pop(subdir)
def test_checkout_specific_version_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 version = self.readonly_version client = GitClient(local_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, version)) 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_version(), version) new_version = self.readonly_version_second self.assertTrue(client.update(new_version)) self.assertEqual(client.get_version(), new_version) shutil.rmtree(directory) self.directories.pop(subdir)
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