Index: slave/skia_slave_scripts/utils/gclient_utils.py |
diff --git a/slave/skia_slave_scripts/utils/gclient_utils.py b/slave/skia_slave_scripts/utils/gclient_utils.py |
deleted file mode 100644 |
index a840c624fe89dbb57d6b3b618a6062957e0764c1..0000000000000000000000000000000000000000 |
--- a/slave/skia_slave_scripts/utils/gclient_utils.py |
+++ /dev/null |
@@ -1,214 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2013 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. |
- |
-"""This module contains utilities for managing gclient checkouts.""" |
- |
- |
-from common import find_depot_tools |
- |
-from py.utils.git_utils import GIT |
-from py.utils import shell_utils |
-from py.utils import misc |
-import os |
- |
- |
-WHICH = 'where' if os.name == 'nt' else 'which' |
-SKIA_TRUNK = 'skia' |
- |
- |
-# TODO(borenet): There are a number of Git commands in this file. They should |
-# probably be added to git_utils. |
- |
- |
-def _GetGclientPy(): |
- """ Return the path to the gclient.py file. """ |
- path_to_gclient = find_depot_tools.add_depot_tools_to_path() |
- if path_to_gclient: |
- return os.path.join(path_to_gclient, 'gclient.py') |
- print 'Falling back on using "gclient" or "gclient.bat"' |
- if os.name == 'nt': |
- return 'gclient.bat' |
- else: |
- return 'gclient' |
- |
- |
-GCLIENT_PY = _GetGclientPy() |
-GCLIENT_FILE = '.gclient' |
- |
- |
-def _RunCmd(cmd): |
- """ Run a "gclient ..." command. """ |
- return shell_utils.run(['python', GCLIENT_PY] + cmd) |
- |
- |
-def GClient(): |
- """Run "gclient" without any command. |
- |
- This is useful because gclient installs things and updates itself, and we may |
- want it to do so before we attempt to do other things. |
- """ |
- return _RunCmd([]) |
- |
- |
-def Config(spec): |
- """ Configure a local checkout. """ |
- return _RunCmd(['config', '--spec=%s' % spec]) |
- |
- |
-def _GetLocalConfig(): |
- """Find and return the configuration for the local checkout. |
- |
- Returns: tuple of the form (checkout_root, solutions_dict), where |
- checkout_root is the path to the directory containing the .glient file, |
- and solutions_dict is the dictionary of solutions defined in .gclient. |
- """ |
- checkout_root = os.path.abspath(os.curdir) |
- depth = len(checkout_root.split(os.path.sep)) |
- # Start with the current working directory and move upwards until we find the |
- # .gclient file. |
- while not os.path.isfile(os.path.join(checkout_root, GCLIENT_FILE)): |
- if not depth: |
- raise Exception('Unable to find %s' % GCLIENT_FILE) |
- checkout_root = os.path.abspath(os.path.join(checkout_root, os.pardir)) |
- depth -= 1 |
- config_vars = {} |
- exec(open(os.path.join(checkout_root, GCLIENT_FILE)).read(), config_vars) |
- return checkout_root, config_vars['solutions'] |
- |
- |
-def maybe_fix_identity(username='chrome-bot', email='skia.committer@gmail.com'): |
- """If either of user.name or user.email is not defined, define it.""" |
- try: |
- shell_utils.run([GIT, 'config', '--get', 'user.name']) |
- except shell_utils.CommandFailedException: |
- shell_utils.run([GIT, 'config', 'user.name', '"%s"' % username]) |
- |
- try: |
- shell_utils.run([GIT, 'config', '--get', 'user.email']) |
- except shell_utils.CommandFailedException: |
- shell_utils.run([GIT, 'config', 'user.email', '"%s"' % email]) |
- |
- |
-def Sync(revisions=None, force=False, delete_unversioned_trees=False, |
- verbose=False, jobs=None, no_hooks=False, extra_args=None): |
- """ Update the local checkout using gclient. |
- |
- Args: |
- revisions: optional list of (branch, revision) tuples indicating which |
- projects to sync to which revisions. |
- force: whether to run with --force. |
- delete_unversioned_trees: whether to run with --delete-unversioned-trees. |
- verbose: whether to run with --verbose. |
- jobs: optional argument for the --jobs flag. |
- no_hooks: whether to run with --nohooks. |
- extra_args: optional list; any additional arguments. |
- """ |
- for branch, _ in (revisions or []): |
- # Do whatever it takes to get up-to-date with origin/master. |
- if os.path.exists(branch): |
- with misc.ChDir(branch): |
- # First, fix the git identity if needed. |
- maybe_fix_identity() |
- |
- # If there are local changes, "git checkout" will fail. |
- shell_utils.run([GIT, 'reset', '--hard', 'HEAD']) |
- # In case HEAD is detached... |
- shell_utils.run([GIT, 'checkout', 'master']) |
- # Always fetch, in case we're unmanaged. |
- shell_utils.run([GIT, 'fetch']) |
- # This updates us to origin/master even if master has diverged. |
- shell_utils.run([GIT, 'reset', '--hard', 'origin/master']) |
- |
- cmd = ['sync', '--no-nag-max'] |
- if verbose: |
- cmd.append('--verbose') |
- if force: |
- cmd.append('--force') |
- if delete_unversioned_trees: |
- cmd.append('--delete_unversioned_trees') |
- if jobs: |
- cmd.append('-j%d' % jobs) |
- if no_hooks: |
- cmd.append('--nohooks') |
- for branch, revision in (revisions or []): |
- if revision: |
- cmd.extend(['--revision', '%s@%s' % (branch, revision)]) |
- if extra_args: |
- cmd.extend(extra_args) |
- output = _RunCmd(cmd) |
- |
- # "gclient sync" just downloads all of the commits. In order to actually sync |
- # to the desired commit, we have to "git reset" to that commit. |
- for branch, revision in (revisions or []): |
- with misc.ChDir(branch): |
- if revision: |
- shell_utils.run([GIT, 'reset', '--hard', revision]) |
- else: |
- shell_utils.run([GIT, 'reset', '--hard', 'origin/master']) |
- return output |
- |
- |
-def GetCheckedOutHash(): |
- """ Determine what commit we actually got. If there are local modifications, |
- raise an exception. """ |
- checkout_root, config_dict = _GetLocalConfig() |
- |
- # Get the checked-out commit hash for the first gclient solution. |
- with misc.ChDir(os.path.join(checkout_root, config_dict[0]['name'])): |
- # First, print out the remote from which we synced, just for debugging. |
- cmd = [GIT, 'remote', '-v'] |
- try: |
- shell_utils.run(cmd) |
- except shell_utils.CommandFailedException as e: |
- print e |
- |
- # "git rev-parse HEAD" returns the commit hash for HEAD. |
- return shell_utils.run([GIT, 'rev-parse', 'HEAD'], |
- log_in_real_time=False).rstrip('\n') |
- |
- |
-def GetGitRepoPOSIXTimestamp(): |
- """Returns the POSIX timestamp for the current Skia commit as in int.""" |
- git_show_command = [GIT, 'show', '--format=%at', '-s'] |
- raw_timestamp = shell_utils.run( |
- git_show_command, log_in_real_time=False, echo=False, |
- print_timestamps=False) |
- return int(raw_timestamp) |
- |
- |
-# than extract the number for the current repo |
-def GetGitNumber(commit_hash): |
- """Returns the GIT number for the current Skia commit as in int.""" |
- try: |
- git_show_command = [GIT, 'number'] |
- git_number = shell_utils.run( |
- git_show_command, log_in_real_time=False, echo=False, |
- print_timestamps=False) |
- return int(git_number) |
- except shell_utils.CommandFailedException: |
- print 'GetGitNumber: Unable to get git number, returning -1' |
- return -1 |
- |
- |
-def Revert(): |
- shell_utils.run([GIT, 'clean', '-f', '-d']) |
- shell_utils.run([GIT, 'reset', '--hard', 'HEAD']) |
- |
- |
-def RunHooks(gyp_defines=None, gyp_generators=None): |
- """ Run "gclient runhooks". |
- |
- Args: |
- gyp_defines: optional string; GYP_DEFINES to be passed to Gyp. |
- gyp_generators: optional string; which GYP_GENERATORS to use. |
- """ |
- if gyp_defines: |
- os.environ['GYP_DEFINES'] = gyp_defines |
- print 'GYP_DEFINES="%s"' % os.environ['GYP_DEFINES'] |
- if gyp_generators: |
- os.environ['GYP_GENERATORS'] = gyp_generators |
- print 'GYP_GENERATORS="%s"' % os.environ['GYP_GENERATORS'] |
- |
- _RunCmd(['runhooks']) |