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):