diff --git a/repo b/repo index 6ecf3921..86d0ec21 100755 --- a/repo +++ b/repo @@ -819,6 +819,7 @@ def _FindRepo(): class _Options(object): help = False + version = False def _ParseArguments(args): @@ -830,7 +831,8 @@ def _ParseArguments(args): a = args[i] if a == '-h' or a == '--help': opt.help = True - + elif a == '--version': + opt.version = True elif not a.startswith('-'): cmd = a arg = args[i + 1:] @@ -877,6 +879,16 @@ def _Help(args): sys.exit(1) +def _Version(): + """Show version information.""" + print('') + print('repo launcher version %s' % ('.'.join(str(x) for x in VERSION),)) + print(' (from %s)' % (__file__,)) + print('git %s' % (ParseGitVersion().full,)) + print('Python %s' % sys.version) + sys.exit(0) + + def _NotInstalled(): print('error: repo is not installed. Use "repo init" to install it here.', file=sys.stderr) @@ -953,6 +965,8 @@ def main(orig_args): _Usage() if cmd == 'help': _Help(args) + if opt.version or cmd == 'version': + _Version() if not cmd: _NotInstalled() if cmd == 'init' or cmd == 'gitc-init': diff --git a/tests/test_wrapper.py b/tests/test_wrapper.py index e574946b..61636b26 100644 --- a/tests/test_wrapper.py +++ b/tests/test_wrapper.py @@ -26,6 +26,14 @@ from pyversion import is_python3 import wrapper +if is_python3(): + from unittest import mock + from io import StringIO +else: + import mock + from StringIO import StringIO + + def fixture(*paths): """Return a path relative to tests/fixtures. """ @@ -48,6 +56,16 @@ class RepoWrapperUnitTest(RepoWrapperTestCase): """Tests helper functions in the repo wrapper """ + def test_version(self): + """Make sure _Version works.""" + with self.assertRaises(SystemExit) as e: + with mock.patch('sys.stdout', new_callable=StringIO) as stdout: + with mock.patch('sys.stderr', new_callable=StringIO) as stderr: + self.wrapper._Version() + self.assertEqual(0, e.exception.code) + self.assertEqual('', stderr.getvalue()) + self.assertIn('repo launcher version', stdout.getvalue()) + def test_get_gitc_manifest_dir_no_gitc(self): """ Test reading a missing gitc config file diff --git a/tox.ini b/tox.ini index 02c5647d..bd1e18cc 100644 --- a/tox.ini +++ b/tox.ini @@ -20,3 +20,8 @@ envlist = py27, py36, py37, py38 [testenv] deps = pytest commands = {toxinidir}/run_tests + +[testenv:py27] +deps = + mock + pytest