28
28
from git .util import cwd , finalize_process
29
29
from test .lib import TestBase , fixture_path , with_rw_directory
30
30
31
+ _FAKE_GIT_VERSION_INFO = (123 , 456 , 789 )
32
+
31
33
32
34
@contextlib .contextmanager
33
35
def _patch_out_env (name ):
@@ -69,7 +71,8 @@ def _rollback_refresh():
69
71
70
72
@contextlib .contextmanager
71
73
def _fake_git ():
72
- fake_output = "git version 123.456.789 (fake)"
74
+ fake_version = "." .join (str (field ) for field in _FAKE_GIT_VERSION_INFO )
75
+ fake_output = f"git version { fake_version } (fake)"
73
76
74
77
with tempfile .TemporaryDirectory () as tdir :
75
78
if os .name == "nt" :
@@ -506,10 +509,21 @@ def test_version_info_is_cached(self):
506
509
with _fake_git () as path :
507
510
new_git = Git () # Not cached yet.
508
511
refresh (path )
509
- version_info = new_git .version_info # Caches the value.
510
- self .assertEqual (version_info , (123 , 456 , 789 ))
511
- os .remove (path ) # Arrange that reading a second time would fail.
512
- self .assertEqual (new_git .version_info , version_info ) # Cached value.
512
+ self .assertEqual (new_git .version_info , _FAKE_GIT_VERSION_INFO )
513
+ os .remove (path ) # Arrange that a second subprocess call would fail.
514
+ self .assertEqual (new_git .version_info , _FAKE_GIT_VERSION_INFO )
515
+
516
+ def test_version_info_cache_is_per_instance (self ):
517
+ with _rollback_refresh ():
518
+ with _fake_git () as path :
519
+ git1 = Git ()
520
+ git2 = Git ()
521
+ refresh (path )
522
+ git1 .version_info
523
+ os .remove (path ) # Arrange that the second subprocess call will fail.
524
+ with self .assertRaises (GitCommandNotFound ):
525
+ git2 .version_info
526
+ git1 .version_info
513
527
514
528
def test_options_are_passed_to_git (self ):
515
529
# This works because any command after git --version is ignored.
0 commit comments