Index: scripts/slave/bot_update.py
|
diff --git a/scripts/slave/bot_update.py b/scripts/slave/bot_update.py
|
index 4365d912b2aa4a7444ed69f2f830da2a01b473a4..53c281a7157c423491f755181f87132a07c02279 100644
|
--- a/scripts/slave/bot_update.py
|
+++ b/scripts/slave/bot_update.py
|
@@ -5,8 +5,6 @@
|
|
import codecs
|
import copy
|
-import cStringIO
|
-import json
|
import optparse
|
import os
|
import pprint
|
@@ -15,7 +13,6 @@
|
import subprocess
|
import sys
|
import time
|
-import urllib2
|
import urlparse
|
|
import os.path as path
|
@@ -119,15 +116,6 @@
|
if sys.platform.startswith('win'):
|
CACHE_DIR = CACHE_DIR.replace('\\', '\\\\')
|
|
-# Find the patch tool.
|
-ROOT_BUILD_DIR = path.dirname(SLAVE_DIR)
|
-ROOT_B_DIR = path.dirname(ROOT_BUILD_DIR)
|
-BUILD_INTERNAL_DIR = path.join(ROOT_B_DIR, 'build_internal')
|
-if sys.platform.startswith('win'):
|
- PATCH_TOOL = path.join(BUILD_INTERNAL_DIR, 'tools', 'patch.EXE')
|
-else:
|
- PATCH_TOOL = '/usr/bin/patch'
|
-
|
|
class SubprocessFailed(Exception):
|
def __init__(self, message, code):
|
@@ -139,18 +127,11 @@
|
"""Interactive subprocess call."""
|
kwargs['stdout'] = subprocess.PIPE
|
kwargs['stderr'] = subprocess.STDOUT
|
- stdin_data = kwargs.pop('stdin_data', None)
|
- if stdin_data:
|
- kwargs['stdin'] = subprocess.PIPE
|
- out = cStringIO.StringIO()
|
for attempt in xrange(RETRIES):
|
attempt_msg = ' (retry #%d)' % attempt if attempt else ''
|
print '===Running %s%s===' % (' '.join(args), attempt_msg)
|
start_time = time.time()
|
proc = subprocess.Popen(args, **kwargs)
|
- if stdin_data:
|
- proc.stdin.write(stdin_data)
|
- proc.stdin.close()
|
# This is here because passing 'sys.stdout' into stdout for proc will
|
# produce out of order output.
|
while True:
|
@@ -158,13 +139,12 @@
|
if not buf:
|
break
|
sys.stdout.write(buf)
|
- out.write(buf)
|
code = proc.wait()
|
elapsed_time = ((time.time() - start_time) / 60.0)
|
if not code:
|
print '===Succeeded in %.1f mins===' % elapsed_time
|
print
|
- return out.getvalue()
|
+ return 0
|
print '===Failed in %.1f mins===' % elapsed_time
|
print
|
|
@@ -180,7 +160,7 @@
|
if sys.platform.startswith('win'):
|
git_executable += '.bat'
|
cmd = (git_executable,) + args
|
- return call(*cmd, **kwargs)
|
+ call(*cmd, **kwargs)
|
|
|
def get_gclient_spec(solutions):
|
@@ -304,84 +284,10 @@
|
'--nohooks', '--noprehooks')
|
|
|
-def create_less_than_or_equal_regex(number):
|
- """ Return a regular expression to test whether an integer less than or equal
|
- to 'number' is present in a given string.
|
- """
|
-
|
- # In three parts, build a regular expression that match any numbers smaller
|
- # than 'number'.
|
- # For example, 78656 would give a regular expression that looks like:
|
- # Part 1
|
- # (78356| # 78356
|
- # Part 2
|
- # 7835[0-5]| # 78350-78355
|
- # 783[0-4][0-9]| # 78300-78349
|
- # 78[0-2][0-9]{2}| # 78000-78299
|
- # 7[0-7][0-9]{3}| # 70000-77999
|
- # [0-6][0-9]{4}| # 10000-69999
|
- # Part 3
|
- # [0-9]{1,4} # 0-9999
|
-
|
- # Part 1: Create an array with all the regexes, as described above.
|
- # Prepopulate it with the number itself.
|
- number = str(number)
|
- expressions = [number]
|
-
|
- # Convert the number to a list, so we can translate digits in it to
|
- # expressions.
|
- num_list = list(number)
|
- num_len = len(num_list)
|
-
|
- # Part 2: Go through all the digits in the number, starting from the end.
|
- # Each iteration appends a line to 'expressions'.
|
- for index in range (num_len - 1, -1, -1):
|
- # Convert this digit back to an integer.
|
- digit = int(num_list[index])
|
-
|
- # Part 2.1: No processing if this digit is a zero.
|
- if digit == 0:
|
- continue
|
-
|
- # Part 2.2: We switch the current digit X by a range "[0-(X-1)]".
|
- if digit == 1:
|
- num_list[index] = '0'
|
- else:
|
- num_list[index] = '[0-%d]' % (digit - 1)
|
-
|
- # Part 2.3: We set all following digits to be "[0-9]".
|
- # Since we just decrementented a digit in a most important position, all
|
- # following digits don't matter. The possible numbers will always be smaller
|
- # than before we decremented.
|
- if (index + 1) < num_len:
|
- if (num_len - (index + 1)) == 1:
|
- num_list[index + 1] = '[0-9]'
|
- else:
|
- num_list[index + 1] = '[0-9]{%s}' % (num_len - (index + 1))
|
-
|
- # Part 2.4: Add this new sub-expression to the list.
|
- expressions.append(''.join(num_list[:min(index+2, num_len)]))
|
-
|
- # Part 3: We add all the full ranges to match all numbers that are at least
|
- # one order of magnitude smaller than the original numbers.
|
- if num_len == 2:
|
- expressions.append('[0-9]')
|
- elif num_len > 2:
|
- expressions.append('[0-9]{1,%s}' % (num_len - 1))
|
-
|
- # All done. We now have our final regular expression.
|
- regex = '(%s)' % ('|'.join(expressions))
|
- return regex
|
-
|
-
|
def get_git_hash(revision, dir_name):
|
- match = "^git-svn-id: [^ ]*@%s " % create_less_than_or_equal_regex(revision)
|
- cmd = ['git', 'log', '-E', '--grep', match, '--format=%H', '--max-count=1']
|
- results = call(*cmd, cwd=dir_name).strip().splitlines()
|
- if results:
|
- return results[0]
|
- raise Exception('We can\'t resolve svn revision %s into a git hash' %
|
- revision)
|
+ match = "^git-svn-id: [^ ]*@%d" % revision
|
+ cmd = ['git', 'log', '--grep', match, '--format=%H', dir_name]
|
+ return subprocess.check_output(cmd).strip() or None
|
|
|
def deps2git(sln_dirs):
|
@@ -396,9 +302,6 @@
|
'--cache_dir=%s' % CACHE_DIR,
|
'--deps=%s' % deps_file, '--out=%s' % deps_git_file)
|
|
-
|
-def emit_got_revision(revision):
|
- print '@@@SET_BUILD_PROPERTY@got_revision@%s@@@' % revision
|
|
def git_checkout(solutions, revision):
|
build_dir = os.getcwd()
|
@@ -428,55 +331,21 @@
|
git('pull', 'origin', 'master', cwd=sln_dir)
|
# TODO(hinoka): We probably have to make use of revision mapping.
|
if first_solution and revision and revision.lower() != 'head':
|
- emit_got_revision(revision)
|
if revision and revision.isdigit() and len(revision) < 40:
|
# rev_num is really a svn revision number, convert it into a git hash.
|
- git_ref = get_git_hash(int(revision), name)
|
+ git_ref = get_git_hash(revision, name)
|
else:
|
# rev_num is actually a git hash or ref, we can just use it.
|
git_ref = revision
|
git('checkout', git_ref, cwd=sln_dir)
|
else:
|
git('checkout', 'origin/master', cwd=sln_dir)
|
- if first_solution:
|
- git_ref = git('log', '--format=%H', '--max-count=1',
|
- cwd=sln_dir).strip()
|
|
first_solution = False
|
- return git_ref
|
-
|
-
|
-def _download(url):
|
- """Fetch url and return content, with retries for flake."""
|
- for attempt in xrange(RETRIES):
|
- try:
|
- return urllib2.urlopen(url).read()
|
- except Exception:
|
- if attempt == RETRIES - 1:
|
- raise
|
-
|
-
|
-def apply_issue_svn(root, patch_url):
|
- patch_data = call('svn', 'cat', patch_url)
|
- call(PATCH_TOOL, '-p0', '--remove-empty-files', '--force', '--forward',
|
- stdin_data=patch_data, cwd=root)
|
-
|
-
|
-def apply_issue_rietveld(issue, patchset, root, server, rev_map, revision):
|
- apply_issue_bin = ('apply_issue.bat' if sys.platform.startswith('win')
|
- else 'apply_issue')
|
- rev_map = json.loads(rev_map)
|
- if root in rev_map and rev_map[root] == 'got_revision':
|
- rev_map[root] = revision
|
- call(apply_issue_bin,
|
- '--root_dir', root,
|
- '--issue', issue,
|
- '--patchset', patchset,
|
- '--no-auth',
|
- '--server', server,
|
- '--revision-mapping', json.dumps(rev_map),
|
- '--base_ref', revision,
|
- '--force')
|
+
|
+
|
+def apply_issue(issue, patchset, root, server):
|
+ pass
|
|
|
def check_flag(flag_file):
|
@@ -505,15 +374,14 @@
|
help='Patchset from issue to patch from, if applicable.')
|
parse.add_option('--patch_url', help='Optional URL to SVN patch.')
|
parse.add_option('--root', help='Repository root.')
|
- parse.add_option('--rietveld_server',
|
- default='codereview.chromium.org',
|
- help='Rietveld server.')
|
+ parse.add_option('--rietveld_server', help='Rietveld server.')
|
parse.add_option('--specs', help='Gcilent spec.')
|
parse.add_option('--master', help='Master name.')
|
parse.add_option('-f', '--force', action='store_true',
|
help='Bypass check to see if we want to be run. '
|
'Should ONLY be used locally.')
|
- parse.add_option('--revision_mapping')
|
+ # TODO(hinoka): We don't actually use this yet, we should factor this in.
|
+ parse.add_option('--revision-mapping')
|
parse.add_option('--revision')
|
parse.add_option('--slave_name', default=socket.getfqdn().split('.')[0],
|
help='Hostname of the current machine, '
|
@@ -569,15 +437,11 @@
|
# Calling git directory because there is no way to run Gclient without
|
# invoking DEPS.
|
print 'Fetching Git checkout'
|
- got_revision = git_checkout(git_solutions, options.revision)
|
-
|
- options.root = options.root or dir_names[0]
|
- if options.patch_url:
|
- apply_issue_svn(options.root, options.patch_url)
|
- elif options.issue:
|
- apply_issue_rietveld(options.issue, options.patchset, options.root,
|
- options.rietveld_server, options.revision_mapping,
|
- got_revision)
|
+ git_checkout(git_solutions, options.revision)
|
+
|
+ # TODO(hinoka): This must be implemented before we can turn this on for TS.
|
+ # if options.issue:
|
+ # apply_issue(options.issue, options.patchset, options.root, options.server)
|
|
# Magic to get deps2git to work with internal DEPS.
|
shutil.copyfile(S2G_INTERNAL_FROM_PATH, S2G_INTERNAL_DEST_PATH)
|
|