Skip to content

Commit 2908789

Browse files
committed
Test that refreshing invalidates cached version_info
Most of these don't pass yet, as such invalidation isn't implemented yet (gitpython-developers#1829).
1 parent 74c04a8 commit 2908789

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

Diff for: test/test_git.py

+78
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,84 @@ def test_version_info_cache_is_per_instance(self):
533533
git2.version_info
534534
git1.version_info
535535

536+
def test_successful_refresh_with_arg_invalidates_cached_version_info(self):
537+
with _rollback_refresh():
538+
with _fake_git(11, 111, 1) as path1:
539+
with _fake_git(22, 222, 2) as path2:
540+
new_git = Git()
541+
refresh(path1)
542+
new_git.version_info
543+
refresh(path2)
544+
self.assertEqual(new_git.version_info, (22, 222, 2))
545+
546+
def test_failed_refresh_with_arg_does_not_invalidate_cached_version_info(self):
547+
with _rollback_refresh():
548+
with _fake_git(11, 111, 1) as path1:
549+
with _fake_git(22, 222, 2) as path2:
550+
new_git = Git()
551+
refresh(path1)
552+
new_git.version_info
553+
os.remove(path1) # Arrange that a repeat call for path1 would fail.
554+
os.remove(path2) # Arrange that the new call for path2 will fail.
555+
with self.assertRaises(GitCommandNotFound):
556+
refresh(path2)
557+
self.assertEqual(new_git.version_info, (11, 111, 1))
558+
559+
def test_successful_refresh_with_same_arg_invalidates_cached_version_info(self):
560+
"""Changing git at the same path and refreshing affects version_info."""
561+
with _rollback_refresh():
562+
with _fake_git(11, 111, 1) as path1:
563+
with _fake_git(22, 222, 2) as path2:
564+
new_git = Git()
565+
refresh(path1)
566+
new_git.version_info
567+
shutil.copy(path2, path1)
568+
refresh(path1) # The fake git at path1 has a different version now.
569+
self.assertEqual(new_git.version_info, (22, 222, 2))
570+
571+
def test_successful_refresh_with_env_invalidates_cached_version_info(self):
572+
with contextlib.ExitStack() as stack:
573+
stack.enter_context(_rollback_refresh())
574+
path1 = stack.enter_context(_fake_git(11, 111, 1))
575+
path2 = stack.enter_context(_fake_git(22, 222, 2))
576+
with mock.patch.dict(os.environ, {"GIT_PYTHON_GIT_EXECUTABLE": path1}):
577+
new_git = Git()
578+
refresh()
579+
new_git.version_info
580+
with mock.patch.dict(os.environ, {"GIT_PYTHON_GIT_EXECUTABLE": path2}):
581+
refresh()
582+
self.assertEqual(new_git.version_info, (22, 222, 2))
583+
584+
def test_failed_refresh_with_env_does_not_invalidate_cached_version_info(self):
585+
with contextlib.ExitStack() as stack:
586+
stack.enter_context(_rollback_refresh())
587+
path1 = stack.enter_context(_fake_git(11, 111, 1))
588+
path2 = stack.enter_context(_fake_git(22, 222, 2))
589+
with mock.patch.dict(os.environ, {"GIT_PYTHON_GIT_EXECUTABLE": path1}):
590+
new_git = Git()
591+
refresh()
592+
new_git.version_info
593+
os.remove(path1) # Arrange that a repeat call for path1 would fail.
594+
os.remove(path2) # Arrange that the new call for path2 will fail.
595+
with mock.patch.dict(os.environ, {"GIT_PYTHON_GIT_EXECUTABLE": path2}):
596+
with self.assertRaises(GitCommandNotFound):
597+
refresh(path2)
598+
self.assertEqual(new_git.version_info, (11, 111, 1))
599+
600+
def test_successful_refresh_with_same_env_invalidates_cached_version_info(self):
601+
"""Changing git at the same path/command and refreshing affects version_info."""
602+
with contextlib.ExitStack() as stack:
603+
stack.enter_context(_rollback_refresh())
604+
path1 = stack.enter_context(_fake_git(11, 111, 1))
605+
path2 = stack.enter_context(_fake_git(22, 222, 2))
606+
with mock.patch.dict(os.environ, {"GIT_PYTHON_GIT_EXECUTABLE": path1}):
607+
new_git = Git()
608+
refresh()
609+
new_git.version_info
610+
shutil.copy(path2, path1)
611+
refresh() # The fake git at path1 has a different version now.
612+
self.assertEqual(new_git.version_info, (22, 222, 2))
613+
536614
def test_options_are_passed_to_git(self):
537615
# This works because any command after git --version is ignored.
538616
git_version = self.git(version=True).NoOp()

0 commit comments

Comments
 (0)