Add a basic depot_tools version information
depot_tools has no versioning. It's hard to know if reported issues were caused due to outdated depot_tools or actual unresolved bug. This CL adds basic information about depot_tools version and it's included in presubmit failure. R=aravindvasudev@google.com, gavinmak@google.com Change-Id: If8577c0826063693a7278a57a0cce629d4b1325f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/3541061 Reviewed-by: Aravind Vasudevan <aravindvasudev@google.com> Reviewed-by: Gavin Mak <gavinmak@google.com> Commit-Queue: Josip Sokcevic <sokcevic@google.com>changes/61/3541061/6
parent
fd032192ed
commit
0399e1762c
@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env vpython3
|
||||
# Copyright 2022 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
if sys.version_info.major == 2:
|
||||
import mock
|
||||
else:
|
||||
from unittest import mock
|
||||
|
||||
DEPOT_TOOLS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
sys.path.insert(0, DEPOT_TOOLS_ROOT)
|
||||
|
||||
from testing_support import coverage_utils
|
||||
import utils
|
||||
|
||||
|
||||
class GitCacheTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
@mock.patch('subprocess.check_output', lambda x, **kwargs: b'foo')
|
||||
def testVersionWithGit(self):
|
||||
version = utils.depot_tools_version()
|
||||
self.assertEqual(version, 'git-foo')
|
||||
|
||||
@mock.patch('subprocess.check_output')
|
||||
@mock.patch('os.path.getmtime', lambda x: 42)
|
||||
def testVersionWithNoGit(self, mock_subprocess):
|
||||
mock_subprocess.side_effect = Exception
|
||||
version = utils.depot_tools_version()
|
||||
self.assertEqual(version, 'recipes.cfg-42')
|
||||
|
||||
@mock.patch('subprocess.check_output')
|
||||
@mock.patch('os.path.getmtime')
|
||||
def testVersionWithNoGit(self, mock_subprocess, mock_getmtime):
|
||||
mock_subprocess.side_effect = Exception
|
||||
mock_getmtime.side_effect = Exception
|
||||
version = utils.depot_tools_version()
|
||||
self.assertEqual(version, 'unknown')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG if '-v' in sys.argv else logging.ERROR)
|
||||
sys.exit(
|
||||
coverage_utils.covered_main(
|
||||
(os.path.join(DEPOT_TOOLS_ROOT, 'git_cache.py')),
|
||||
required_percentage=0))
|
||||
@ -0,0 +1,25 @@
|
||||
# Copyright 2022 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
|
||||
def depot_tools_version():
|
||||
depot_tools_root = os.path.dirname(os.path.abspath(__file__))
|
||||
try:
|
||||
commit_hash = subprocess.check_output(['git', 'rev-parse', 'HEAD'],
|
||||
cwd=depot_tools_root).decode(
|
||||
'utf-8', 'ignore')
|
||||
return 'git-%s' % commit_hash
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# git check failed, let's check last modification of frequently checked file
|
||||
try:
|
||||
mtime = os.path.getmtime(
|
||||
os.path.join(depot_tools_root, 'infra', 'config', 'recipes.cfg'))
|
||||
return 'recipes.cfg-%d' % (mtime)
|
||||
except Exception:
|
||||
return 'unknown'
|
||||
Loading…
Reference in New Issue