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_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(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_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertEqual(client.get_branch(), "master") self.assertEqual(client.get_branch_parent(), "master")
def test_checkout(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_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertEqual(client._get_branch(), "master") self.assertEqual(client._get_branch_parent(), ("master", "origin"))
def test_checkout_master_branch_and_update(self): # subdir = "checkout_specific_version_test" 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.assertEqual(client.get_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertEqual(client.get_branch_parent(), branch) self.assertTrue(client.update(branch)) self.assertEqual(client.get_branch_parent(), 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_checkout_no_unnecessary_updates_other_branch(self): client = GitClient(self.local_path) client.fetches = 0 client.submodules = 0 client.fast_forwards = 0 def ifetch(self): self.fetches += 1 return True def iff(self, fetch=True, branch_parent=None, verbose=False): self.fast_forwards += 1 return True def isubm(self, verbose=False, timeout=None): self.submodules += 1 return True client._do_fetch = types.MethodType(ifetch, client) client._do_fast_forward = types.MethodType(iff, client) client.update_submodules = types.MethodType(isubm, client) url = self.remote_path self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, 'test_branch')) self.assertEqual(1, client.submodules) self.assertEqual(0, client.fetches) self.assertEqual(0, client.fast_forwards)
def test_checkout_shallow(self): url = 'file://' + self.remote_path client = GitClient(self.local_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, shallow=True)) 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_branch(), "master") self.assertEqual(client.get_branch_parent(), "master") po = subprocess.Popen("git log --pretty=format:%H", shell=True, cwd=self.local_path, stdout=subprocess.PIPE) log = po.stdout.read().decode('UTF-8').splitlines() # shallow only contains last 2 commits self.assertEqual(2, len(log), log)
def testDiffRelpath(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals( '''\ diff --git ros/added.txt ros/added.txt new file mode 100644 index 0000000..454f6b3 --- /dev/null +++ ros/added.txt @@ -0,0 +1 @@ +0123456789abcdef \\ No newline at end of file diff --git ros/deleted-fs.txt ros/deleted-fs.txt deleted file mode 100644 index e69de29..0000000 diff --git ros/deleted.txt ros/deleted.txt deleted file mode 100644 index e69de29..0000000 diff --git ros/modified-fs.txt ros/modified-fs.txt index e69de29..454f6b3 100644 --- ros/modified-fs.txt +++ ros/modified-fs.txt @@ -0,0 +1 @@ +0123456789abcdef \\ No newline at end of file diff --git ros/modified.txt ros/modified.txt index e69de29..454f6b3 100644 --- ros/modified.txt +++ ros/modified.txt @@ -0,0 +1 @@ +0123456789abcdef \\ No newline at end of file''', client.get_diff(basepath=os.path.dirname(self.local_path)).rstrip())
def testDiff(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals( 'diff --git ./added.txt ./added.txt\nnew file mode 100644\nindex 0000000..454f6b3\n--- /dev/null\n+++ ./added.txt\n@@ -0,0 +1 @@\n+0123456789abcdef\n\\ No newline at end of file\ndiff --git ./deleted-fs.txt ./deleted-fs.txt\ndeleted file mode 100644\nindex e69de29..0000000\ndiff --git ./deleted.txt ./deleted.txt\ndeleted file mode 100644\nindex e69de29..0000000\ndiff --git ./modified-fs.txt ./modified-fs.txt\nindex e69de29..454f6b3 100644\n--- ./modified-fs.txt\n+++ ./modified-fs.txt\n@@ -0,0 +1 @@\n+0123456789abcdef\n\\ No newline at end of file\ndiff --git ./modified.txt ./modified.txt\nindex e69de29..454f6b3 100644\n--- ./modified.txt\n+++ ./modified.txt\n@@ -0,0 +1 @@\n+0123456789abcdef\n\\ No newline at end of file', client.get_diff().rstrip())
def test_checkout_master_branch_and_update(self): # subdir = "checkout_specific_version_test" 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.assertEqual(client.get_path(), self.local_path) self.assertEqual(client.get_url(), url) self.assertEqual(client._get_branch_parent(), (branch, "origin")) self.assertTrue(client.update(branch)) self.assertEqual(client._get_branch_parent(), (branch, "origin"))
def test_checkout_no_unnecessary_updates_other_branch(self): client = GitClient(self.local_path) client.fetches = 0 client.submodules = 0 client.fast_forwards = 0 def ifetch(self): self.fetches += 1 return True def iff(self, branch_parent, fetch=True, verbose=False): self.fast_forwards += 1 return True def isubm(self, verbose=False, timeout=None): self.submodules += 1 return True client._do_fetch = types.MethodType(ifetch, client) client._do_fast_forward = types.MethodType(iff, client) client._update_submodules = types.MethodType(isubm, client) url = self.remote_path self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, 'test_branch')) self.assertEqual(1, client.submodules) self.assertEqual(0, client.fetches) self.assertEqual(0, client.fast_forwards)
def testStatusUntracked(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals( 'A ./added.txt\n D ./deleted-fs.txt\nD ./deleted.txt\n M ./modified-fs.txt\nM ./modified.txt\n?? ./added-fs.txt\n', client.get_status(untracked=True))
def testStatusRelPath(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals( 'A ros/added.txt\n D ros/deleted-fs.txt\nD ros/deleted.txt\n M ros/modified-fs.txt\nM ros/modified.txt\n', client.get_status(basepath=os.path.dirname(self.local_path)))
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_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_specific_tag_and_update(self): url = self.remote_path tag = "last_tag" client = GitClient(self.local_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, tag)) 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_branch_parent(), (None, None)) tag = "test_tag" self.assertTrue(client.update(tag)) self.assertEqual(client._get_branch_parent(), (None, None)) new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client._get_branch_parent(), (new_branch, "origin")) tag = "test_tag" self.assertTrue(client.update(tag))
def test_checkout_specific_tag_and_update(self): url = self.remote_path tag = "last_tag" client = GitClient(self.local_path) self.assertFalse(client.path_exists()) self.assertFalse(client.detect_presence()) self.assertTrue(client.checkout(url, tag)) 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_branch_parent(), None) tag = "test_tag" self.assertTrue(client.update(tag)) self.assertEqual(client.get_branch_parent(), None) new_branch = 'master' self.assertTrue(client.update(new_branch)) self.assertEqual(client.get_branch_parent(), new_branch) tag = "test_tag" self.assertTrue(client.update(tag))
def testStatus(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals( '''\ A ./added.txt D ./deleted-fs.txt D ./deleted.txt M ./modified-fs.txt M ./modified.txt ''', client.get_status(porcelain=True))
def testStatusRelPath(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals( '''\ A ros/added.txt D ros/deleted-fs.txt D ros/deleted.txt M ros/modified-fs.txt M ros/modified.txt ''', client.get_status(basepath=os.path.dirname(self.local_path), porcelain=True))
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 testStatusUntracked(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals('A ./added.txt\n D ./deleted-fs.txt\nD ./deleted.txt\n M ./modified-fs.txt\nM ./modified.txt\n?? ./added-fs.txt\n', client.get_status(untracked=True))
def testDiff(self): client = GitClient(self.local_path) self.assertTrue(client.path_exists()) self.assertTrue(client.detect_presence()) self.assertEquals('diff --git ./added.txt ./added.txt\nnew file mode 100644\nindex 0000000..454f6b3\n--- /dev/null\n+++ ./added.txt\n@@ -0,0 +1 @@\n+0123456789abcdef\n\\ No newline at end of file\ndiff --git ./deleted-fs.txt ./deleted-fs.txt\ndeleted file mode 100644\nindex e69de29..0000000\ndiff --git ./deleted.txt ./deleted.txt\ndeleted file mode 100644\nindex e69de29..0000000\ndiff --git ./modified-fs.txt ./modified-fs.txt\nindex e69de29..454f6b3 100644\n--- ./modified-fs.txt\n+++ ./modified-fs.txt\n@@ -0,0 +1 @@\n+0123456789abcdef\n\\ No newline at end of file\ndiff --git ./modified.txt ./modified.txt\nindex e69de29..454f6b3 100644\n--- ./modified.txt\n+++ ./modified.txt\n@@ -0,0 +1 @@\n+0123456789abcdef\n\\ No newline at end of file', client.get_diff().rstrip())