def test_detached_to_branch(self): client = GitClient(self.local_path) # url = self.remote_path self.assertEqual(client._get_branch(), "master") tag = "no_br_tag" self.assertTrue(client.update(tag)) self.assertEqual(client._get_branch(), None) self.assertEqual(client._get_branch_parent(), (None, None)) tag = "test_tag" self.assertTrue(client.update(tag)) self.assertEqual(client._get_branch(), None) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client._get_branch_parent(), (None, None)) #update should not change anything self.assertTrue(client.update()) # no arg self.assertEqual(client._get_branch(), None) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client._get_branch_parent(), (None, None)) new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client._get_branch(), new_branch) self.assertEqual(client.get_version(), self.readonly_version) self.assertEqual(client._get_branch_parent(), (new_branch, "origin"))
def test_checkout_specific_branch_and_update(self): # subdir = "checkout_specific_version_test" url = self.remote_path branch = "test_branch" client = GitClient(self.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.assertTrue(client._is_local_branch(branch)) self.assertEqual(client.get_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client._get_branch(), branch) self.assertEqual(client._get_branch_parent(), (branch, "origin")) self.assertTrue(client.update()) # no arg self.assertEqual(client._get_branch(), branch) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client._get_branch_parent(), (branch, "origin")) self.assertTrue(client.update(branch)) # same branch arg self.assertEqual(client._get_branch(), branch) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client._get_branch_parent(), (branch, "origin")) new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client._get_branch(), new_branch) self.assertEqual(client._get_branch_parent(), (new_branch, "origin"))
def test_detached_to_branch(self): client = GitClient(self.local_path) # url = self.remote_path self.assertEqual(client.get_branch(), "master") tag = "no_br_tag" self.assertTrue(client.update(tag)) self.assertEqual(client.get_branch(), None) self.assertEqual(client.get_branch_parent(), None) tag = "test_tag" self.assertTrue(client.update(tag)) self.assertEqual(client.get_branch(), None) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client.get_branch_parent(), None) #update should not change anything self.assertTrue(client.update()) # no arg self.assertEqual(client.get_branch(), None) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client.get_branch_parent(), None) new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client.get_branch(), new_branch) self.assertEqual(client.get_version(), self.readonly_version) self.assertEqual(client.get_branch_parent(), new_branch)
def test_checkout_specific_branch_and_update(self): # subdir = "checkout_specific_version_test" url = self.remote_path branch = "test_branch" client = GitClient(self.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.assertTrue(client.is_local_branch(branch)) self.assertEqual(client.get_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client.get_branch(), branch) self.assertEqual(client.get_branch_parent(), branch) self.assertTrue(client.update()) # no arg self.assertEqual(client.get_branch(), branch) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client.get_branch_parent(), branch) self.assertTrue(client.update(branch)) # same branch arg self.assertEqual(client.get_branch(), branch) self.assertEqual(client.get_version(), self.readonly_version_init) self.assertEqual(client.get_branch_parent(), branch) new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client.get_branch(), new_branch) self.assertEqual(client.get_branch_parent(), new_branch)
def test_checkout_specific_version_and_update(self): url = self.remote_path version = self.readonly_version client = GitClient(self.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(), self.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)
def test_get_url_by_reading(self): url = self.remote_path client = GitClient(self.local_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(client.get_url(), self.remote_path) 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) # private functions self.assertFalse(client._is_local_branch("test_branch")) self.assertTrue(client._is_remote_branch("test_branch")) self.assertTrue(client.is_tag("test_tag")) self.assertFalse(client._is_remote_branch("test_tag")) self.assertFalse(client.is_tag("test_branch"))
def test_get_url_by_reading(self): url = self.remote_path client = GitClient(self.local_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(client.get_url(), self.remote_path) 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) # private functions self.assertFalse(client.is_local_branch("test_branch")) self.assertTrue(client.is_remote_branch("test_branch")) self.assertTrue(client.is_tag("test_tag")) self.assertFalse(client.is_remote_branch("test_tag")) self.assertFalse(client.is_tag("test_branch"))
def test_inject_protection(self): client = GitClient(self.local_path) try: client.is_tag('foo"; bar"', fetch=False) self.fail("expected Exception") except VcsError: pass try: client._rev_list_contains('foo"; echo bar"', "foo", fetch=False) self.fail("expected Exception") except VcsError: pass try: client._rev_list_contains('foo', 'foo"; echo bar"', fetch=False) self.fail("expected Exception") except VcsError: pass try: client.get_version('foo"; echo bar"') self.fail("expected Exception") except VcsError: pass
def test_inject_protection(self): client = GitClient(self.local_path) try: client.is_tag('foo"; bar"', fetch=False) self.fail("expected Exception") except VcsError: pass try: client.rev_list_contains('foo"; echo bar"', "foo", fetch=False) self.fail("expected Exception") except VcsError: pass try: client.rev_list_contains('foo', 'foo"; echo bar"', fetch=False) self.fail("expected Exception") except VcsError: pass try: client.get_version('foo"; echo bar"') self.fail("expected Exception") except VcsError: pass
def test_checkout_local_only_branch_and_update(self): # prevent regression on wstool#25: no rebase after switching branch url = self.remote_path branch = "master" client = GitClient(self.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.assertTrue(client._is_local_branch(branch)) subprocess.check_call("git reset --hard HEAD~1", shell=True, cwd=self.local_path) subprocess.check_call("git checkout -b new_local_branch", shell=True, cwd=self.local_path) self.assertTrue(client.update(branch)) # same branch arg self.assertEqual(client._get_branch(), branch) self.assertEqual(client.get_version(), self.readonly_version) self.assertEqual(client._get_branch_parent(), (branch, "origin"))
def test_checkout_untracked_branch_and_update(self): # difference to tracked branches is that branch parent is None, and we may hop outside lineage client = GitClient(self.local_path) url = self.remote_path branch = "localbranch" self.assertEqual(client._get_branch(), "master") self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertTrue(client._is_local_branch(branch)) self.assertEqual(client.get_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertTrue(client.update(branch)) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client._get_branch(), branch) self.assertEqual(client._get_branch_parent(), (None, None)) self.assertTrue(client.update()) # no arg self.assertEqual(client._get_branch(), branch) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client._get_branch_parent(), (None, None)) self.assertTrue(client.update(branch)) # same branch arg self.assertEqual(client._get_branch(), branch) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client._get_branch_parent(), (None, None)) # to master new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client._get_branch(), new_branch) self.assertEqual(client.get_version(), self.readonly_version) self.assertEqual(client._get_branch_parent(), (new_branch, "origin")) # and back self.assertTrue(client.update(branch)) # same branch arg self.assertEqual(client._get_branch(), branch) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client._get_branch_parent(), (None, None)) # to dangling commit sha = self.dangling_version self.assertTrue(client.update(sha)) self.assertEqual(client._get_branch(), None) self.assertEqual(client.get_version(), self.dangling_version) self.assertEqual(client._get_branch_parent(), (None, None)) #should not work to protect commits from becoming dangled # to commit outside lineage tag = "test_tag" self.assertFalse(client.update(tag))
def test_checkout_untracked_branch_and_update(self): # difference to tracked branches is that branch parent is None, and we may hop outside lineage client = GitClient(self.local_path) url = self.remote_path branch = "localbranch" self.assertEqual(client.get_branch(), "master") self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertTrue(client.is_local_branch(branch)) self.assertEqual(client.get_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertTrue(client.update(branch)) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client.get_branch(), branch) self.assertEqual(client.get_branch_parent(), None) self.assertTrue(client.update()) # no arg self.assertEqual(client.get_branch(), branch) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client.get_branch_parent(), None) self.assertTrue(client.update(branch)) # same branch arg self.assertEqual(client.get_branch(), branch) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client.get_branch_parent(), None) # to master new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client.get_branch(), new_branch) self.assertEqual(client.get_version(), self.readonly_version) self.assertEqual(client.get_branch_parent(), new_branch) # and back self.assertTrue(client.update(branch)) # same branch arg self.assertEqual(client.get_branch(), branch) self.assertEqual(client.get_version(), self.untracked_version) self.assertEqual(client.get_branch_parent(), None) # to dangling commit sha = self.dangling_version self.assertTrue(client.update(sha)) self.assertEqual(client.get_branch(), None) self.assertEqual(client.get_version(), self.dangling_version) self.assertEqual(client.get_branch_parent(), None) #should not work to protect commits from becoming dangled # to commit outside lineage tag = "test_tag" self.assertFalse(client.update(tag))
def test_protect_dangling(self): client = GitClient(self.local_path) # url = self.remote_path self.assertEqual(client._get_branch(), "master") tag = "no_br_tag" self.assertTrue(client.update(tag)) self.assertEqual(client._get_branch(), None) self.assertEqual(client._get_branch_parent(), (None, None)) tag = "test_tag" self.assertTrue(client.update(tag)) self.assertEqual(client._get_branch(), None) self.assertEqual(client._get_branch_parent(), (None, None)) # to dangling commit sha = self.dangling_version self.assertTrue(client.update(sha)) self.assertEqual(client._get_branch(), None) self.assertEqual(client.get_version(), self.dangling_version) self.assertEqual(client._get_branch_parent(), (None, None)) # now HEAD protects the dangling commit, should not be allowed to move off. new_branch = 'master' self.assertFalse(client.update(new_branch))
def test_protect_dangling(self): client = GitClient(self.local_path) # url = self.remote_path self.assertEqual(client.get_branch(), "master") tag = "no_br_tag" self.assertTrue(client.update(tag)) self.assertEqual(client.get_branch(), None) self.assertEqual(client.get_branch_parent(), None) tag = "test_tag" self.assertTrue(client.update(tag)) self.assertEqual(client.get_branch(), None) self.assertEqual(client.get_branch_parent(), None) # to dangling commit sha = self.dangling_version self.assertTrue(client.update(sha)) self.assertEqual(client.get_branch(), None) self.assertEqual(client.get_version(), self.dangling_version) self.assertEqual(client.get_branch_parent(), None) # now HEAD protects the dangling commit, should not be allowed to move off. new_branch = 'master' self.assertFalse(client.update(new_branch))
def test_get_version_not_exist(self): client = GitClient(path=self.local_path) client.checkout(url=self.remote_path, version='master') self.assertEqual(client.get_version(spec='not_exist_version'), None)