From 2dbc2be846d1d00e907efbf8171c35b889ab0155 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Thu, 3 Jun 2021 09:45:09 +0200 Subject: [PATCH 1/9] Adds failing test for repo.tag() method --- test/test_repo.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/test/test_repo.py b/test/test_repo.py index 8dc178337..9261f1cf7 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -414,6 +414,16 @@ def test_index(self): def test_tag(self): assert self.rorepo.tag('refs/tags/0.1.5').commit + def test_tag_to_full_tag_path(self): + tags = ['0.1.5', 'tags/0.1.5', 'refs/tags/0.1.5'] + value_errors = [] + for tag in tags: + try: + self.rorepo.tag(tag) + except ValueError as valueError: + value_errors.append(valueError.args[0]) + raise ValueError('. '.join(value_errors)) + def test_archive(self): tmpfile = tempfile.mktemp(suffix='archive-test') with open(tmpfile, 'wb') as stream: @@ -445,7 +455,7 @@ def test_should_display_blame_information(self, git): tlist = b[0][1] self.assertTrue(tlist) self.assertTrue(isinstance(tlist[0], str)) - self.assertTrue(len(tlist) < sum(len(t) for t in tlist)) # test for single-char bug + self.assertTrue(len(tlist) < sum(len(t) for t in tlist)) # test for single-char bug # BINARY BLAME git.return_value = fixture('blame_binary') @@ -454,7 +464,7 @@ def test_should_display_blame_information(self, git): def test_blame_real(self): c = 0 - nml = 0 # amount of multi-lines per blame + nml = 0 # amount of multi-lines per blame for item in self.rorepo.head.commit.tree.traverse( predicate=lambda i, d: i.type == 'blob' and i.path.endswith('.py')): c += 1 @@ -486,7 +496,8 @@ def test_blame_incremental(self, git): # Original line numbers orig_ranges = flatten([entry.orig_linenos for entry in blame_output]) - self.assertEqual(orig_ranges, flatten([range(2, 3), range(14, 15), range(1, 2), range(2, 13), range(13, 15)])) # noqa E501 + self.assertEqual(orig_ranges, flatten( + [range(2, 3), range(14, 15), range(1, 2), range(2, 13), range(13, 15)])) # noqa E501 @mock.patch.object(Git, '_call_process') def test_blame_complex_revision(self, git): @@ -530,9 +541,9 @@ def test_untracked_files(self, rwrepo): # end for each run def test_config_reader(self): - reader = self.rorepo.config_reader() # all config files + reader = self.rorepo.config_reader() # all config files assert reader.read_only - reader = self.rorepo.config_reader("repository") # single config file + reader = self.rorepo.config_reader("repository") # single config file assert reader.read_only def test_config_writer(self): @@ -729,7 +740,7 @@ def _assert_rev_parse(self, name): def test_rw_rev_parse(self, rwrepo): # verify it does not confuse branches with hexsha ids ahead = rwrepo.create_head('aaaaaaaa') - assert(rwrepo.rev_parse(str(ahead)) == ahead.commit) + assert (rwrepo.rev_parse(str(ahead)) == ahead.commit) def test_rev_parse(self): rev_parse = self.rorepo.rev_parse @@ -1041,7 +1052,7 @@ def test_git_work_tree_env(self, rw_dir): def test_rebasing(self, rw_dir): r = Repo.init(rw_dir) fp = osp.join(rw_dir, 'hello.txt') - r.git.commit("--allow-empty", message="init",) + r.git.commit("--allow-empty", message="init", ) with open(fp, 'w') as fs: fs.write("hello world") r.git.add(Git.polish_url(fp)) From a625d08801eacd94f373074d2c771103823954d0 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Thu, 3 Jun 2021 10:12:30 +0200 Subject: [PATCH 2/9] Adds _common_default to build _common_path_default --- git/refs/tag.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/refs/tag.py b/git/refs/tag.py index 8f88c5225..4d84239e7 100644 --- a/git/refs/tag.py +++ b/git/refs/tag.py @@ -18,7 +18,8 @@ class TagReference(Reference): print(tagref.tag.message)""" __slots__ = () - _common_path_default = "refs/tags" + _common_default = "tags" + _common_path_default = Reference._common_path_default + "/" + _common_default @property def commit(self): From 057514e85bc99754e08d45385bf316920963adf9 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Thu, 3 Jun 2021 10:18:46 +0200 Subject: [PATCH 3/9] Fixes test to not throw false negative results --- test/test_repo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test_repo.py b/test/test_repo.py index 9261f1cf7..453ec5c31 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -422,7 +422,8 @@ def test_tag_to_full_tag_path(self): self.rorepo.tag(tag) except ValueError as valueError: value_errors.append(valueError.args[0]) - raise ValueError('. '.join(value_errors)) + if value_errors: + raise ValueError('. '.join(value_errors)) def test_archive(self): tmpfile = tempfile.mktemp(suffix='archive-test') From abf9373865c319d2f1aaf188feef900bb8ebf933 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Thu, 3 Jun 2021 10:21:50 +0200 Subject: [PATCH 4/9] Fixes resolving of tag parameter for repo.tag I accessed private variables instead of adding getters, because other parts of the code do the same and I didn't know if there was a reason for it. E.g.: remote.py line 409: (...) RemoteReference._common_path_default (...) --- git/repo/base.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index e23ebb1ac..540a5fe33 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -402,7 +402,18 @@ def tags(self) -> 'IterableList': def tag(self, path: PathLike) -> TagReference: """:return: TagReference Object, reference pointing to a Commit or Tag :param path: path to the tag reference, i.e. 0.1.5 or tags/0.1.5 """ - return TagReference(self, path) + full_path = self._to_full_tag_path(path) + return TagReference(self, full_path) + + @staticmethod + def _to_full_tag_path(path: PathLike): + if path.startswith(TagReference._common_path_default + '/'): + return path + if path.startswith(TagReference._common_default + '/'): + return Reference._common_path_default + '/' + path + else: + return TagReference._common_path_default + '/' + path + def create_head(self, path: PathLike, commit: str = 'HEAD', force: bool = False, logmsg: Optional[str] = None From 79e24f78fa35136216130a10d163c91f9a6d4970 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Thu, 3 Jun 2021 10:52:59 +0200 Subject: [PATCH 5/9] Reverts auto format introduced with 2dbc2be8 --- test/test_repo.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/test/test_repo.py b/test/test_repo.py index 453ec5c31..0311653a2 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -422,8 +422,7 @@ def test_tag_to_full_tag_path(self): self.rorepo.tag(tag) except ValueError as valueError: value_errors.append(valueError.args[0]) - if value_errors: - raise ValueError('. '.join(value_errors)) + raise ValueError('. '.join(value_errors)) def test_archive(self): tmpfile = tempfile.mktemp(suffix='archive-test') @@ -456,7 +455,7 @@ def test_should_display_blame_information(self, git): tlist = b[0][1] self.assertTrue(tlist) self.assertTrue(isinstance(tlist[0], str)) - self.assertTrue(len(tlist) < sum(len(t) for t in tlist)) # test for single-char bug + self.assertTrue(len(tlist) < sum(len(t) for t in tlist)) # test for single-char bug # BINARY BLAME git.return_value = fixture('blame_binary') @@ -465,7 +464,7 @@ def test_should_display_blame_information(self, git): def test_blame_real(self): c = 0 - nml = 0 # amount of multi-lines per blame + nml = 0 # amount of multi-lines per blame for item in self.rorepo.head.commit.tree.traverse( predicate=lambda i, d: i.type == 'blob' and i.path.endswith('.py')): c += 1 @@ -497,8 +496,7 @@ def test_blame_incremental(self, git): # Original line numbers orig_ranges = flatten([entry.orig_linenos for entry in blame_output]) - self.assertEqual(orig_ranges, flatten( - [range(2, 3), range(14, 15), range(1, 2), range(2, 13), range(13, 15)])) # noqa E501 + self.assertEqual(orig_ranges, flatten([range(2, 3), range(14, 15), range(1, 2), range(2, 13), range(13, 15)])) # noqa E501 @mock.patch.object(Git, '_call_process') def test_blame_complex_revision(self, git): @@ -542,9 +540,9 @@ def test_untracked_files(self, rwrepo): # end for each run def test_config_reader(self): - reader = self.rorepo.config_reader() # all config files + reader = self.rorepo.config_reader() # all config files assert reader.read_only - reader = self.rorepo.config_reader("repository") # single config file + reader = self.rorepo.config_reader("repository") # single config file assert reader.read_only def test_config_writer(self): @@ -741,7 +739,7 @@ def _assert_rev_parse(self, name): def test_rw_rev_parse(self, rwrepo): # verify it does not confuse branches with hexsha ids ahead = rwrepo.create_head('aaaaaaaa') - assert (rwrepo.rev_parse(str(ahead)) == ahead.commit) + assert(rwrepo.rev_parse(str(ahead)) == ahead.commit) def test_rev_parse(self): rev_parse = self.rorepo.rev_parse @@ -1053,7 +1051,7 @@ def test_git_work_tree_env(self, rw_dir): def test_rebasing(self, rw_dir): r = Repo.init(rw_dir) fp = osp.join(rw_dir, 'hello.txt') - r.git.commit("--allow-empty", message="init", ) + r.git.commit("--allow-empty", message="init",) with open(fp, 'w') as fs: fs.write("hello world") r.git.add(Git.polish_url(fp)) From 5a61a63ed4bb866b2817acbb04e045f8460e040e Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Thu, 3 Jun 2021 11:10:39 +0200 Subject: [PATCH 6/9] Adds name to AUTHORS file --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 7b21b2b26..606796d98 100644 --- a/AUTHORS +++ b/AUTHORS @@ -43,4 +43,5 @@ Contributors are: -Liam Beguin -Ram Rachum -Alba Mendez +-Robert Westman Portions derived from other open source works and are clearly marked. From 702bdf105205ca845a50b16d6703828d18e93003 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 3 Jun 2021 21:06:30 +0800 Subject: [PATCH 7/9] Fix flake8 --- git/repo/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index 540a5fe33..53698592b 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -414,7 +414,6 @@ def _to_full_tag_path(path: PathLike): else: return TagReference._common_path_default + '/' + path - def create_head(self, path: PathLike, commit: str = 'HEAD', force: bool = False, logmsg: Optional[str] = None ) -> 'SymbolicReference': From 7ca97dcef3131a11dd5ef41d674bb6bd36608608 Mon Sep 17 00:00:00 2001 From: Robert Westman Date: Thu, 3 Jun 2021 16:45:03 +0200 Subject: [PATCH 8/9] Removes PathLike type requirement for full_tag creation --- git/repo/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/repo/base.py b/git/repo/base.py index 53698592b..55682411a 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -406,7 +406,7 @@ def tag(self, path: PathLike) -> TagReference: return TagReference(self, full_path) @staticmethod - def _to_full_tag_path(path: PathLike): + def _to_full_tag_path(path): if path.startswith(TagReference._common_path_default + '/'): return path if path.startswith(TagReference._common_default + '/'): From 01a96b92f7d873cbd531d142813c2be7ab88d5a5 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 4 Jun 2021 10:35:22 +0800 Subject: [PATCH 9/9] Conditionally throw an error --- test/test_repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_repo.py b/test/test_repo.py index 0311653a2..04102b013 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -422,7 +422,7 @@ def test_tag_to_full_tag_path(self): self.rorepo.tag(tag) except ValueError as valueError: value_errors.append(valueError.args[0]) - raise ValueError('. '.join(value_errors)) + self.assertEqual(value_errors, []) def test_archive(self): tmpfile = tempfile.mktemp(suffix='archive-test')