diff options
-rw-r--r-- | git_command.py | 24 | ||||
-rw-r--r-- | subcmds/init.py | 17 |
2 files changed, 26 insertions, 15 deletions
diff --git a/git_command.py b/git_command.py index 7ff1abac..d56ad0a8 100644 --- a/git_command.py +++ b/git_command.py | |||
@@ -68,6 +68,30 @@ class _GitCall(object): | |||
68 | return fun | 68 | return fun |
69 | git = _GitCall() | 69 | git = _GitCall() |
70 | 70 | ||
71 | _git_version = None | ||
72 | |||
73 | def git_require(min_version, fail=False): | ||
74 | global _git_version | ||
75 | |||
76 | if _git_version is None: | ||
77 | ver_str = git.version() | ||
78 | if ver_str.startswith('git version '): | ||
79 | _git_version = tuple( | ||
80 | map(lambda x: int(x), | ||
81 | ver_str[len('git version '):].strip().split('.')[0:3] | ||
82 | )) | ||
83 | else: | ||
84 | print >>sys.stderr, 'fatal: "%s" unsupported' % ver_str | ||
85 | sys.exit(1) | ||
86 | |||
87 | if min_version <= _git_version: | ||
88 | return True | ||
89 | if fail: | ||
90 | need = '.'.join(map(lambda x: str(x), min_version)) | ||
91 | print >>sys.stderr, 'fatal: git %s or later required' % need | ||
92 | sys.exit(1) | ||
93 | return False | ||
94 | |||
71 | class GitCommand(object): | 95 | class GitCommand(object): |
72 | def __init__(self, | 96 | def __init__(self, |
73 | project, | 97 | project, |
diff --git a/subcmds/init.py b/subcmds/init.py index 5ba4d794..fbc406e2 100644 --- a/subcmds/init.py +++ b/subcmds/init.py | |||
@@ -20,7 +20,7 @@ from color import Coloring | |||
20 | from command import InteractiveCommand, MirrorSafeCommand | 20 | from command import InteractiveCommand, MirrorSafeCommand |
21 | from error import ManifestParseError | 21 | from error import ManifestParseError |
22 | from project import SyncBuffer | 22 | from project import SyncBuffer |
23 | from git_command import git, MIN_GIT_VERSION | 23 | from git_command import git_require, MIN_GIT_VERSION |
24 | 24 | ||
25 | class Init(InteractiveCommand, MirrorSafeCommand): | 25 | class Init(InteractiveCommand, MirrorSafeCommand): |
26 | common = True | 26 | common = True |
@@ -85,19 +85,6 @@ to update the working directory files. | |||
85 | dest='no_repo_verify', action='store_true', | 85 | dest='no_repo_verify', action='store_true', |
86 | help='do not verify repo source code') | 86 | help='do not verify repo source code') |
87 | 87 | ||
88 | def _CheckGitVersion(self): | ||
89 | ver_str = git.version() | ||
90 | if not ver_str.startswith('git version '): | ||
91 | print >>sys.stderr, 'error: "%s" unsupported' % ver_str | ||
92 | sys.exit(1) | ||
93 | |||
94 | ver_str = ver_str[len('git version '):].strip() | ||
95 | ver_act = tuple(map(lambda x: int(x), ver_str.split('.')[0:3])) | ||
96 | if ver_act < MIN_GIT_VERSION: | ||
97 | need = '.'.join(map(lambda x: str(x), MIN_GIT_VERSION)) | ||
98 | print >>sys.stderr, 'fatal: git %s or later required' % need | ||
99 | sys.exit(1) | ||
100 | |||
101 | def _SyncManifest(self, opt): | 88 | def _SyncManifest(self, opt): |
102 | m = self.manifest.manifestProject | 89 | m = self.manifest.manifestProject |
103 | is_new = not m.Exists | 90 | is_new = not m.Exists |
@@ -214,7 +201,7 @@ to update the working directory files. | |||
214 | gc.SetString('color.ui', 'auto') | 201 | gc.SetString('color.ui', 'auto') |
215 | 202 | ||
216 | def Execute(self, opt, args): | 203 | def Execute(self, opt, args): |
217 | self._CheckGitVersion() | 204 | git_require(MIN_GIT_VERSION, fail=True) |
218 | self._SyncManifest(opt) | 205 | self._SyncManifest(opt) |
219 | self._LinkManifest(opt.manifest_name) | 206 | self._LinkManifest(opt.manifest_name) |
220 | 207 | ||