From 9277ff561bcc37c70b9e6e015f623af20216b9e0 Mon Sep 17 00:00:00 2001 From: Travis Runner Date: Thu, 7 Dec 2023 19:06:05 -0500 Subject: [PATCH] Avoid another tempdir content assumption in test test_init was using tempfile.gettempdir() directly to get the location where the hard-coded path repos/foo/bar.git would be used to test repository creation with relative and absolute paths. That reused the same location each time, and also assumed the directory would be usable, which could fail due to previous runs or due to the path being used separately from GitPython's tests. This commit fixes that by using that path inside a temporary directory, known at the start of the test to be empty. Reorganizing the acquision and cleanup logic also has had the effect of causing the test no longer to be skipped due to the logic in git.util.rmtree due to the final cleanup attempt (after all assertions). The directory is now successfully removed on Windows, and the test passes on all platforms. --- test/test_repo.py | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/test/test_repo.py b/test/test_repo.py index c68dd074c..845fabf15 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -41,7 +41,7 @@ UnsafeProtocolError, ) from git.repo.fun import touch -from git.util import bin_to_hex, cygpath, join_path_native, rmfile, rmtree +from git.util import bin_to_hex, cwd, cygpath, join_path_native, rmfile, rmtree from test.lib import TestBase, fixture, with_rw_directory, with_rw_repo @@ -511,13 +511,11 @@ def write(self, b): repo.git.log(n=100, output_stream=TestOutputStream(io.DEFAULT_BUFFER_SIZE)) def test_init(self): - prev_cwd = os.getcwd() - os.chdir(tempfile.gettempdir()) - git_dir_rela = "repos/foo/bar.git" - del_dir_abs = osp.abspath("repos") - git_dir_abs = osp.abspath(git_dir_rela) - try: - # with specific path + with tempfile.TemporaryDirectory() as tdir, cwd(tdir): + git_dir_rela = "repos/foo/bar.git" + git_dir_abs = osp.abspath(git_dir_rela) + + # With specific path for path in (git_dir_rela, git_dir_abs): r = Repo.init(path=path, bare=True) self.assertIsInstance(r, Repo) @@ -527,7 +525,7 @@ def test_init(self): self._assert_empty_repo(r) - # test clone + # Test clone clone_path = path + "_clone" rc = r.clone(clone_path) self._assert_empty_repo(rc) @@ -562,13 +560,6 @@ def test_init(self): assert not r.has_separate_working_tree() self._assert_empty_repo(r) - finally: - try: - rmtree(del_dir_abs) - except OSError: - pass - os.chdir(prev_cwd) - # END restore previous state def test_bare_property(self): self.rorepo.bare