diff --git a/git_command.py b/git_command.py index 1807b55e..54db4d16 100644 --- a/git_command.py +++ b/git_command.py @@ -80,22 +80,12 @@ def terminate_ssh_clients(): _git_version = None class _GitCall(object): - def version(self): - p = GitCommand(None, ['--version'], capture_stdout=True) - if p.Wait() == 0: - if hasattr(p.stdout, 'decode'): - return p.stdout.decode('utf-8') - else: - return p.stdout - return None - def version_tuple(self): global _git_version if _git_version is None: - ver_str = git.version() - _git_version = Wrapper().ParseGitVersion(ver_str) + _git_version = Wrapper().ParseGitVersion() if _git_version is None: - print('fatal: "%s" unsupported' % ver_str, file=sys.stderr) + print('fatal: unable to detect git version', file=sys.stderr) sys.exit(1) return _git_version diff --git a/subcmds/version.py b/subcmds/version.py index 8b48bcfb..9fb694df 100644 --- a/subcmds/version.py +++ b/subcmds/version.py @@ -41,5 +41,5 @@ class Version(Command, MirrorSafeCommand): print('repo launcher version %s' % Version.wrapper_version) print(' (from %s)' % Version.wrapper_path) - print(git.version().strip()) + print('git %s' % git.version_tuple().full) print('Python %s' % sys.version) diff --git a/tests/test_git_command.py b/tests/test_git_command.py new file mode 100644 index 00000000..2ed84969 --- /dev/null +++ b/tests/test_git_command.py @@ -0,0 +1,45 @@ +# -*- coding:utf-8 -*- +# +# Copyright 2019 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import git_command + + +class GitCallUnitTest(unittest.TestCase): + """Tests the _GitCall class (via git_command.git).""" + + def test_version_tuple(self): + """Check git.version_tuple() handling.""" + ver = git_command.git.version_tuple() + self.assertIsNotNone(ver) + + # We don't dive too deep into the values here to avoid having to update + # whenever git versions change. We do check relative to this min version + # as this is what `repo` itself requires via MIN_GIT_VERSION. + MIN_GIT_VERSION = (1, 7, 2) + self.assertTrue(isinstance(ver.major, int)) + self.assertTrue(isinstance(ver.minor, int)) + self.assertTrue(isinstance(ver.micro, int)) + + self.assertGreater(ver.major, MIN_GIT_VERSION[0] - 1) + self.assertGreaterEqual(ver.micro, 0) + self.assertGreaterEqual(ver.major, 0) + + self.assertGreaterEqual(ver, MIN_GIT_VERSION) + self.assertLess(ver, (9999, 9999, 9999)) + + self.assertNotEqual('', ver.full)