Mercurial > public > mercurial-scm > hg
comparison mercurial/subrepo.py @ 20840:308344d80fe5
subrepo: factor out Git version check to add doctests
Followup to 6a2acb0d9352::e5641536e4d5.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Fri, 21 Mar 2014 16:09:17 -0700 |
parents | c7d543eebe1a |
children | 6500a2eebee8 |
comparison
equal
deleted
inserted
replaced
20839:377a111d1cd2 | 20840:308344d80fe5 |
---|---|
1105 except OSError, e: | 1105 except OSError, e: |
1106 if e.errno != 2 or os.name != 'nt': | 1106 if e.errno != 2 or os.name != 'nt': |
1107 raise | 1107 raise |
1108 self._gitexecutable = 'git.cmd' | 1108 self._gitexecutable = 'git.cmd' |
1109 out, err = self._gitnodir(['--version']) | 1109 out, err = self._gitnodir(['--version']) |
1110 versionstatus = self._checkversion(out) | |
1111 if versionstatus == 'unknown': | |
1112 self._ui.warn(_('cannot retrieve git version\n')) | |
1113 elif versionstatus == 'abort': | |
1114 raise util.Abort(_('git subrepo requires at least 1.6.0 or later')) | |
1115 elif versionstatus == 'warning': | |
1116 self._ui.warn(_('git subrepo requires at least 1.6.0 or later\n')) | |
1117 | |
1118 @staticmethod | |
1119 def _checkversion(out): | |
1120 '''ensure git version is new enough | |
1121 | |
1122 >>> _checkversion = gitsubrepo._checkversion | |
1123 >>> _checkversion('git version 1.6.0') | |
1124 'ok' | |
1125 >>> _checkversion('git version 1.8.5') | |
1126 'ok' | |
1127 >>> _checkversion('git version 1.4.0') | |
1128 'abort' | |
1129 >>> _checkversion('git version 1.5.0') | |
1130 'warning' | |
1131 >>> _checkversion('git version 1.9-rc0') | |
1132 'ok' | |
1133 >>> _checkversion('git version 1.9.0.265.g81cdec2') | |
1134 'ok' | |
1135 >>> _checkversion('git version 1.9.0.GIT') | |
1136 'ok' | |
1137 >>> _checkversion('git version 12345') | |
1138 'unknown' | |
1139 >>> _checkversion('no') | |
1140 'unknown' | |
1141 ''' | |
1110 m = re.search(r'^git version (\d+)\.(\d+)', out) | 1142 m = re.search(r'^git version (\d+)\.(\d+)', out) |
1111 if not m: | 1143 if not m: |
1112 self._ui.warn(_('cannot retrieve git version\n')) | 1144 return 'unknown' |
1113 return | |
1114 version = (int(m.group(1)), int(m.group(2))) | 1145 version = (int(m.group(1)), int(m.group(2))) |
1115 # git 1.4.0 can't work at all, but 1.5.X can in at least some cases, | 1146 # git 1.4.0 can't work at all, but 1.5.X can in at least some cases, |
1116 # despite the docstring comment. For now, error on 1.4.0, warn on | 1147 # despite the docstring comment. For now, error on 1.4.0, warn on |
1117 # 1.5.0 but attempt to continue. | 1148 # 1.5.0 but attempt to continue. |
1118 if version < (1, 5): | 1149 if version < (1, 5): |
1119 raise util.Abort(_('git subrepo requires at least 1.6.0 or later')) | 1150 return 'abort' |
1120 elif version < (1, 6): | 1151 elif version < (1, 6): |
1121 self._ui.warn(_('git subrepo requires at least 1.6.0 or later\n')) | 1152 return 'warning' |
1153 return 'ok' | |
1122 | 1154 |
1123 def _gitcommand(self, commands, env=None, stream=False): | 1155 def _gitcommand(self, commands, env=None, stream=False): |
1124 return self._gitdir(commands, env=env, stream=stream)[0] | 1156 return self._gitdir(commands, env=env, stream=stream)[0] |
1125 | 1157 |
1126 def _gitdir(self, commands, env=None, stream=False): | 1158 def _gitdir(self, commands, env=None, stream=False): |