subrepo: factor out Git version check to add doctests
Followup to 6a2acb0d9352::e5641536e4d5.
--- a/mercurial/subrepo.py Sat Feb 15 19:51:20 2014 +0900
+++ b/mercurial/subrepo.py Fri Mar 21 16:09:17 2014 -0700
@@ -1107,18 +1107,50 @@
raise
self._gitexecutable = 'git.cmd'
out, err = self._gitnodir(['--version'])
+ versionstatus = self._checkversion(out)
+ if versionstatus == 'unknown':
+ self._ui.warn(_('cannot retrieve git version\n'))
+ elif versionstatus == 'abort':
+ raise util.Abort(_('git subrepo requires at least 1.6.0 or later'))
+ elif versionstatus == 'warning':
+ self._ui.warn(_('git subrepo requires at least 1.6.0 or later\n'))
+
+ @staticmethod
+ def _checkversion(out):
+ '''ensure git version is new enough
+
+ >>> _checkversion = gitsubrepo._checkversion
+ >>> _checkversion('git version 1.6.0')
+ 'ok'
+ >>> _checkversion('git version 1.8.5')
+ 'ok'
+ >>> _checkversion('git version 1.4.0')
+ 'abort'
+ >>> _checkversion('git version 1.5.0')
+ 'warning'
+ >>> _checkversion('git version 1.9-rc0')
+ 'ok'
+ >>> _checkversion('git version 1.9.0.265.g81cdec2')
+ 'ok'
+ >>> _checkversion('git version 1.9.0.GIT')
+ 'ok'
+ >>> _checkversion('git version 12345')
+ 'unknown'
+ >>> _checkversion('no')
+ 'unknown'
+ '''
m = re.search(r'^git version (\d+)\.(\d+)', out)
if not m:
- self._ui.warn(_('cannot retrieve git version\n'))
- return
+ return 'unknown'
version = (int(m.group(1)), int(m.group(2)))
# git 1.4.0 can't work at all, but 1.5.X can in at least some cases,
# despite the docstring comment. For now, error on 1.4.0, warn on
# 1.5.0 but attempt to continue.
if version < (1, 5):
- raise util.Abort(_('git subrepo requires at least 1.6.0 or later'))
+ return 'abort'
elif version < (1, 6):
- self._ui.warn(_('git subrepo requires at least 1.6.0 or later\n'))
+ return 'warning'
+ return 'ok'
def _gitcommand(self, commands, env=None, stream=False):
return self._gitdir(commands, env=env, stream=stream)[0]
--- a/tests/test-doctest.py Sat Feb 15 19:51:20 2014 +0900
+++ b/tests/test-doctest.py Fri Mar 21 16:09:17 2014 -0700
@@ -21,6 +21,7 @@
testmod('mercurial.minirst')
testmod('mercurial.revset')
testmod('mercurial.store')
+testmod('mercurial.subrepo')
testmod('mercurial.templatefilters')
testmod('mercurial.ui')
testmod('mercurial.url')