123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/usr/bin/env python
- # Copyright (c) 2018 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 scm
- import subprocess2
- import sys
- from third_party import colorama
- APP_URL = 'https://cit-cli-metrics.appspot.com'
- NOTICE_COUNTDOWN_HEADER = (
- '*****************************************************\n'
- '* METRICS COLLECTION WILL START IN %2d EXECUTIONS *'
- )
- NOTICE_COLLECTION_HEADER = (
- '*****************************************************\n'
- '* METRICS COLLECTION IS TAKING PLACE *'
- )
- NOTICE_FOOTER = (
- '* *\n'
- '* For more information, and for how to disable this *\n'
- '* message, please see metrics.README.md in your *\n'
- '* depot_tools checkout. *\n'
- '*****************************************************\n'
- )
- KNOWN_PROJECT_URLS = {
- 'https://chrome-internal.googlesource.com/chrome/ios_internal',
- 'https://chrome-internal.googlesource.com/infra/infra_internal',
- 'https://chromium.googlesource.com/breakpad/breakpad',
- 'https://chromium.googlesource.com/chromium/src',
- 'https://chromium.googlesource.com/chromium/tools/depot_tools',
- 'https://chromium.googlesource.com/crashpad/crashpad',
- 'https://chromium.googlesource.com/external/gyp',
- 'https://chromium.googlesource.com/external/naclports',
- 'https://chromium.googlesource.com/infra/goma/client',
- 'https://chromium.googlesource.com/infra/infra',
- 'https://chromium.googlesource.com/native_client/',
- 'https://chromium.googlesource.com/syzygy',
- 'https://chromium.googlesource.com/v8/v8',
- 'https://dart.googlesource.com/sdk',
- 'https://pdfium.googlesource.com/pdfium',
- 'https://skia.googlesource.com/buildbot',
- 'https://skia.googlesource.com/skia',
- 'https://webrtc.googlesource.com/src',
- }
- def get_python_version():
- """Return the python version in the major.minor.micro format."""
- return '{v.major}.{v.minor}.{v.micro}'.format(v=sys.version_info)
- def return_code_from_exception(exception):
- """Returns the exit code that would result of raising the exception."""
- if exception is None:
- return 0
- if isinstance(exception[1], SystemExit):
- return exception[1].code
- return 1
- def seconds_to_weeks(duration):
- """Transform a |duration| from seconds to weeks approximately.
- Drops the lowest 19 bits of the integer representation, which ammounts to
- about 6 days.
- """
- return int(duration) >> 19
- def get_repo_timestamp(path_to_repo):
- """Get an approximate timestamp for the upstream of |path_to_repo|.
- Returns the top two bits of the timestamp of the HEAD for the upstream of the
- branch path_to_repo is checked out at.
- """
- # Get the upstream for the current branch. If we're not in a branch, fallback
- # to HEAD.
- try:
- upstream = scm.GIT.GetUpstreamBranch(path_to_repo)
- except subprocess2.CalledProcessError:
- upstream = 'HEAD'
- # Get the timestamp of the HEAD for the upstream of the current branch.
- p = subprocess2.Popen(
- ['git', '-C', path_to_repo, 'log', '-n1', upstream, '--format=%at'],
- stdout=subprocess2.PIPE, stderr=subprocess2.PIPE)
- stdout, _ = p.communicate()
- # If there was an error, give up.
- if p.returncode != 0:
- return None
- # Get the age of the checkout in weeks.
- return seconds_to_weeks(stdout.strip())
- def print_notice(countdown):
- """Print a notice to let the user know the status of metrics collection."""
- colorama.init()
- print colorama.Fore.RED + '\033[1m'
- if countdown:
- print NOTICE_COUNTDOWN_HEADER % countdown
- else:
- print NOTICE_COLLECTION_HEADER
- print NOTICE_FOOTER + colorama.Style.RESET_ALL
|