Share git version parsing code with wrapper module
'repo' and 'git_command.py' had their own git version parsing code.
This change shares that code between the modules. DRY is good.
Change-Id: Ic896d2dc08353644bd4ced57e15a91284d97d54a
diff --git a/git_command.py b/git_command.py
index 89b681e..354fc71 100644
--- a/git_command.py
+++ b/git_command.py
@@ -21,6 +21,7 @@
from signal import SIGTERM
from error import GitError
from trace import REPO_TRACE, IsTrace, Trace
+from wrapper import Wrapper
GIT = 'git'
MIN_GIT_VERSION = (1, 5, 4)
@@ -84,19 +85,10 @@
def version_tuple(self):
global _git_version
-
if _git_version is None:
ver_str = git.version().decode('utf-8')
- if ver_str.startswith('git version '):
- num_ver_str = ver_str[len('git version '):].strip().split('-')[0]
- to_tuple = []
- for num_str in num_ver_str.split('.')[:3]:
- if num_str.isdigit():
- to_tuple.append(int(num_str))
- else:
- to_tuple.append(0)
- _git_version = tuple(to_tuple)
- else:
+ _git_version = Wrapper().ParseGitVersion(ver_str)
+ if _git_version is None:
print('fatal: "%s" unsupported' % ver_str, file=sys.stderr)
sys.exit(1)
return _git_version
diff --git a/repo b/repo
index 56d784f..1587fef 100755
--- a/repo
+++ b/repo
@@ -278,6 +278,20 @@
raise
+def ParseGitVersion(ver_str):
+ if not ver_str.startswith('git version '):
+ return None
+
+ num_ver_str = ver_str[len('git version '):].strip().split('-')[0]
+ to_tuple = []
+ for num_str in num_ver_str.split('.')[:3]:
+ if num_str.isdigit():
+ to_tuple.append(int(num_str))
+ else:
+ to_tuple.append(0)
+ return tuple(to_tuple)
+
+
def _CheckGitVersion():
cmd = [GIT, '--version']
try:
@@ -295,12 +309,11 @@
proc.stdout.close()
proc.wait()
- if not ver_str.startswith('git version '):
+ ver_act = ParseGitVersion(ver_str)
+ if ver_act is None:
_print('error: "%s" unsupported' % ver_str, file=sys.stderr)
raise CloneFailure()
- ver_str = ver_str[len('git version '):].strip()
- ver_act = tuple(map(int, ver_str.split('.')[0:3]))
if ver_act < MIN_GIT_VERSION:
need = '.'.join(map(str, MIN_GIT_VERSION))
_print('fatal: git %s or later required' % need, file=sys.stderr)