Added version_info property to git command. Its cached and efficient,… · gitpython-developers/GitPython@e583a9e (original) (raw)
`@@ -5,80 +5,96 @@
`
5
5
`# the BSD License: http://www.opensource.org/licenses/bsd-license.php
`
6
6
``
7
7
`import os, sys
`
8
``
`-
from git.test.lib import *
`
``
8
`+
from git.test.lib import (
`
``
9
`+
TestBase,
`
``
10
`+
patch_object,
`
``
11
`+
raises,
`
``
12
`+
assert_equal,
`
``
13
`+
assert_true,
`
``
14
`+
assert_match,
`
``
15
`+
fixture_path
`
``
16
`+
)
`
9
17
`from git import Git, GitCommandError
`
10
18
``
11
``
`-
class TestGit(TestCase):
`
12
``
-
13
``
`-
@classmethod
`
14
``
`-
def setUpAll(cls):
`
15
``
`-
cls.git = Git(GIT_REPO)
`
``
19
`+
class TestGit(TestBase):
`
``
20
+
``
21
`+
@classmethod
`
``
22
`+
def setUpAll(cls):
`
``
23
`+
super(TestGit, cls).setUpAll()
`
``
24
`+
cls.git = Git(cls.rorepo.working_dir)
`
16
25
``
17
``
`-
@patch_object(Git, 'execute')
`
18
``
`-
def test_call_process_calls_execute(self, git):
`
19
``
`-
git.return_value = ''
`
20
``
`-
self.git.version()
`
21
``
`-
assert_true(git.called)
`
22
``
`-
assert_equal(git.call_args, ((['git', 'version'],), {}))
`
``
26
`+
@patch_object(Git, 'execute')
`
``
27
`+
def test_call_process_calls_execute(self, git):
`
``
28
`+
git.return_value = ''
`
``
29
`+
self.git.version()
`
``
30
`+
assert_true(git.called)
`
``
31
`+
assert_equal(git.call_args, ((['git', 'version'],), {}))
`
23
32
``
24
``
`-
@raises(GitCommandError)
`
25
``
`-
def test_it_raises_errors(self):
`
26
``
`-
self.git.this_does_not_exist()
`
``
33
`+
@raises(GitCommandError)
`
``
34
`+
def test_it_raises_errors(self):
`
``
35
`+
self.git.this_does_not_exist()
`
27
36
``
28
37
``
29
``
`-
def test_it_transforms_kwargs_into_git_command_arguments(self):
`
30
``
`-
assert_equal(["-s"], self.git.transform_kwargs(**{'s': True}))
`
31
``
`-
assert_equal(["-s5"], self.git.transform_kwargs(**{'s': 5}))
`
``
38
`+
def test_it_transforms_kwargs_into_git_command_arguments(self):
`
``
39
`+
assert_equal(["-s"], self.git.transform_kwargs(**{'s': True}))
`
``
40
`+
assert_equal(["-s5"], self.git.transform_kwargs(**{'s': 5}))
`
32
41
``
33
``
`-
assert_equal(["--max-count"], self.git.transform_kwargs(**{'max_count': True}))
`
34
``
`-
assert_equal(["--max-count=5"], self.git.transform_kwargs(**{'max_count': 5}))
`
``
42
`+
assert_equal(["--max-count"], self.git.transform_kwargs(**{'max_count': True}))
`
``
43
`+
assert_equal(["--max-count=5"], self.git.transform_kwargs(**{'max_count': 5}))
`
35
44
``
36
``
`-
assert_equal(["-s", "-t"], self.git.transform_kwargs(**{'s': True, 't': True}))
`
``
45
`+
assert_equal(["-s", "-t"], self.git.transform_kwargs(**{'s': True, 't': True}))
`
37
46
``
38
``
`-
def test_it_executes_git_to_shell_and_returns_result(self):
`
39
``
`-
assert_match('^git version [\d.]{2}.*$', self.git.execute(["git","version"]))
`
``
47
`+
def test_it_executes_git_to_shell_and_returns_result(self):
`
``
48
`+
assert_match('^git version [\d.]{2}.*$', self.git.execute(["git","version"]))
`
40
49
``
41
``
`-
def test_it_accepts_stdin(self):
`
42
``
`-
filename = fixture_path("cat_file_blob")
`
43
``
`-
fh = open(filename, 'r')
`
44
``
`-
assert_equal("70c379b63ffa0795fdbfbc128e5a2818397b7ef8",
`
45
``
`-
self.git.hash_object(istream=fh, stdin=True))
`
46
``
`-
fh.close()
`
``
50
`+
def test_it_accepts_stdin(self):
`
``
51
`+
filename = fixture_path("cat_file_blob")
`
``
52
`+
fh = open(filename, 'r')
`
``
53
`+
assert_equal("70c379b63ffa0795fdbfbc128e5a2818397b7ef8",
`
``
54
`+
self.git.hash_object(istream=fh, stdin=True))
`
``
55
`+
fh.close()
`
47
56
``
48
``
`-
@patch_object(Git, 'execute')
`
49
``
`-
def test_it_ignores_false_kwargs(self, git):
`
50
``
`-
this_should_not_be_ignored=False implies it should be ignored
`
51
``
`-
output = self.git.version(pass_this_kwarg=False)
`
52
``
`-
assert_true("pass_this_kwarg" not in git.call_args[1])
`
53
``
-
54
``
`-
def test_persistent_cat_file_command(self):
`
55
``
`-
read header only
`
56
``
`-
import subprocess as sp
`
57
``
`-
hexsha = "b2339455342180c7cc1e9bba3e9f181f7baa5167"
`
58
``
`-
g = self.git.cat_file(batch_check=True, istream=sp.PIPE,as_process=True)
`
59
``
`-
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
`
60
``
`-
g.stdin.flush()
`
61
``
`-
obj_info = g.stdout.readline()
`
62
``
-
63
``
`-
read header + data
`
64
``
`-
g = self.git.cat_file(batch=True, istream=sp.PIPE,as_process=True)
`
65
``
`-
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
`
66
``
`-
g.stdin.flush()
`
67
``
`-
obj_info_two = g.stdout.readline()
`
68
``
`-
assert obj_info == obj_info_two
`
69
``
-
70
``
`-
read data - have to read it in one large chunk
`
71
``
`-
size = int(obj_info.split()[2])
`
72
``
`-
data = g.stdout.read(size)
`
73
``
`-
terminating_newline = g.stdout.read(1)
`
74
``
-
75
``
`-
now we should be able to read a new object
`
76
``
`-
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
`
77
``
`-
g.stdin.flush()
`
78
``
`-
assert g.stdout.readline() == obj_info
`
79
``
-
80
``
-
81
``
`-
same can be achived using the respective command functions
`
82
``
`-
hexsha, typename, size = self.git.get_object_header(hexsha)
`
83
``
`-
hexsha, typename_two, size_two, data = self.git.get_object_data(hexsha)
`
84
``
`-
assert typename == typename_two and size == size_two
`
``
57
`+
@patch_object(Git, 'execute')
`
``
58
`+
def test_it_ignores_false_kwargs(self, git):
`
``
59
`+
this_should_not_be_ignored=False implies it should be ignored
`
``
60
`+
output = self.git.version(pass_this_kwarg=False)
`
``
61
`+
assert_true("pass_this_kwarg" not in git.call_args[1])
`
``
62
+
``
63
`+
def test_persistent_cat_file_command(self):
`
``
64
`+
read header only
`
``
65
`+
import subprocess as sp
`
``
66
`+
hexsha = "b2339455342180c7cc1e9bba3e9f181f7baa5167"
`
``
67
`+
g = self.git.cat_file(batch_check=True, istream=sp.PIPE,as_process=True)
`
``
68
`+
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
`
``
69
`+
g.stdin.flush()
`
``
70
`+
obj_info = g.stdout.readline()
`
``
71
+
``
72
`+
read header + data
`
``
73
`+
g = self.git.cat_file(batch=True, istream=sp.PIPE,as_process=True)
`
``
74
`+
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
`
``
75
`+
g.stdin.flush()
`
``
76
`+
obj_info_two = g.stdout.readline()
`
``
77
`+
assert obj_info == obj_info_two
`
``
78
+
``
79
`+
read data - have to read it in one large chunk
`
``
80
`+
size = int(obj_info.split()[2])
`
``
81
`+
data = g.stdout.read(size)
`
``
82
`+
terminating_newline = g.stdout.read(1)
`
``
83
+
``
84
`+
now we should be able to read a new object
`
``
85
`+
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
`
``
86
`+
g.stdin.flush()
`
``
87
`+
assert g.stdout.readline() == obj_info
`
``
88
+
``
89
+
``
90
`+
same can be achived using the respective command functions
`
``
91
`+
hexsha, typename, size = self.git.get_object_header(hexsha)
`
``
92
`+
hexsha, typename_two, size_two, data = self.git.get_object_data(hexsha)
`
``
93
`+
assert typename == typename_two and size == size_two
`
``
94
+
``
95
`+
def test_version(self):
`
``
96
`+
v = self.git.version_info
`
``
97
`+
assert isinstance(v, tuple)
`
``
98
`+
for n in v:
`
``
99
`+
assert isinstance(n, int)
`
``
100
`+
#END verify number types
`