mercurial/subrepo.py
changeset 20840 308344d80fe5
parent 20818 c7d543eebe1a
child 20870 6500a2eebee8
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):