Index: recipe_modules/bot_update/resources/bot_update.py |
diff --git a/recipe_modules/bot_update/resources/bot_update.py b/recipe_modules/bot_update/resources/bot_update.py |
index 724010fc2b7638f9257f016aa68f47575dfaa81e..39c4bf61d7868be0ac5d80162527447fdc8b1cff 100755 |
--- a/recipe_modules/bot_update/resources/bot_update.py |
+++ b/recipe_modules/bot_update/resources/bot_update.py |
@@ -352,15 +352,7 @@ DEPS2GIT_DIR_PATH = path.join(SCRIPTS_DIR, 'tools', 'deps2git') |
DEPS2GIT_PATH = path.join(DEPS2GIT_DIR_PATH, 'deps2git.py') |
S2G_INTERNAL_PATH = path.join(SCRIPTS_DIR, 'tools', 'deps2git_internal', |
'svn_to_git_internal.py') |
- |
-# ../../cache_dir aka /b/build/slave/cache_dir |
GIT_CACHE_PATH = path.join(DEPOT_TOOLS_DIR, 'git_cache.py') |
-CACHE_DIR = path.join(SLAVE_DIR, 'cache_dir') |
-# Because we print CACHE_DIR out into a .gclient file, and then later run |
-# eval() on it, backslashes need to be escaped, otherwise "E:\b\build" gets |
-# parsed as "E:[\x08][\x08]uild". |
-if sys.platform.startswith('win'): |
- CACHE_DIR = CACHE_DIR.replace('\\', '\\\\') |
# Find the patch tool. |
if sys.platform.startswith('win'): |
@@ -525,10 +517,10 @@ def git(*args, **kwargs): # pragma: no cover |
return call(*cmd, **kwargs) |
-def get_gclient_spec(solutions, target_os, target_os_only): |
+def get_gclient_spec(solutions, target_os, target_os_only, git_cache_dir): |
return GCLIENT_TEMPLATE % { |
'solutions': pprint.pformat(solutions, indent=4), |
- 'cache_dir': '"%s"' % CACHE_DIR, |
+ 'cache_dir': '"%s"' % git_cache_dir, |
'target_os': ('\ntarget_os=%s' % target_os) if target_os else '', |
'target_os_only': '\ntarget_os_only=%s' % target_os_only |
} |
@@ -700,10 +692,11 @@ def ensure_no_checkout(dir_names, scm_dirname): |
print 'done' |
-def gclient_configure(solutions, target_os, target_os_only): |
+def gclient_configure(solutions, target_os, target_os_only, git_cache_dir): |
"""Should do the same thing as gclient --spec='...'.""" |
with codecs.open('.gclient', mode='w', encoding='utf-8') as f: |
- f.write(get_gclient_spec(solutions, target_os, target_os_only)) |
+ f.write(get_gclient_spec( |
+ solutions, target_os, target_os_only, git_cache_dir)) |
def gclient_sync(with_branch_heads, shallow): |
@@ -842,7 +835,7 @@ def need_to_run_deps2git(repo_base, deps_file, deps_git_file): |
return last_known_deps_ref != merge_base_ref |
-def ensure_deps2git(solution, shallow): |
+def ensure_deps2git(solution, shallow, git_cache_dir): |
repo_base = path.join(os.getcwd(), solution['name']) |
deps_file = path.join(repo_base, 'DEPS') |
deps_git_file = path.join(repo_base, '.DEPS.git') |
@@ -857,7 +850,7 @@ def ensure_deps2git(solution, shallow): |
print '===DEPS file modified, need to run deps2git===' |
cmd = [sys.executable, DEPS2GIT_PATH, |
'--workspace', os.getcwd(), |
- '--cache_dir', CACHE_DIR, |
+ '--cache_dir', git_cache_dir, |
'--deps', deps_file, |
'--out', deps_git_file] |
if 'chrome-internal.googlesource' in solution['url']: |
@@ -932,13 +925,14 @@ def force_revision(folder_name, revision): |
ref = branch if branch.startswith('refs/') else 'origin/%s' % branch |
git('checkout', '--force', ref, cwd=folder_name) |
-def git_checkout(solutions, revisions, shallow, refs): |
+def git_checkout(solutions, revisions, shallow, refs, git_cache_dir): |
build_dir = os.getcwd() |
# Before we do anything, break all git_cache locks. |
- if path.isdir(CACHE_DIR): |
- git('cache', 'unlock', '-vv', '--force', '--all', '--cache-dir', CACHE_DIR) |
- for item in os.listdir(CACHE_DIR): |
- filename = os.path.join(CACHE_DIR, item) |
+ if path.isdir(git_cache_dir): |
+ git('cache', 'unlock', '-vv', '--force', '--all', |
+ '--cache-dir', git_cache_dir) |
+ for item in os.listdir(git_cache_dir): |
+ filename = os.path.join(git_cache_dir, item) |
if item.endswith('.lock'): |
raise Exception('%s exists after cache unlock' % filename) |
first_solution = True |
@@ -957,12 +951,13 @@ def git_checkout(solutions, revisions, shallow, refs): |
sln_dir = path.join(build_dir, name) |
s = ['--shallow'] if shallow else [] |
populate_cmd = (['cache', 'populate', '--ignore_locks', '-v', |
- '--cache-dir', CACHE_DIR] + s + [url]) |
+ '--cache-dir', git_cache_dir] + s + [url]) |
for ref in refs: |
populate_cmd.extend(['--ref', ref]) |
git(*populate_cmd) |
mirror_dir = git( |
- 'cache', 'exists', '--quiet', '--cache-dir', CACHE_DIR, url).strip() |
+ 'cache', 'exists', '--quiet', |
+ '--cache-dir', git_cache_dir, url).strip() |
clone_cmd = ( |
'clone', '--no-checkout', '--local', '--shared', mirror_dir, sln_dir) |
@@ -1300,13 +1295,13 @@ def ensure_checkout(solutions, revisions, first_sln, target_os, target_os_only, |
patch_root, issue, patchset, patch_url, rietveld_server, |
gerrit_repo, gerrit_ref, revision_mapping, |
apply_issue_email_file, apply_issue_key_file, buildspec, |
- gyp_env, shallow, runhooks, refs): |
+ gyp_env, shallow, runhooks, refs, git_cache_dir): |
# Get a checkout of each solution, without DEPS or hooks. |
# Calling git directly because there is no way to run Gclient without |
# invoking DEPS. |
print 'Fetching Git checkout' |
- git_ref = git_checkout(solutions, revisions, shallow, refs) |
+ git_ref = git_checkout(solutions, revisions, shallow, refs, git_cache_dir) |
patches = None |
if patch_url: |
@@ -1331,10 +1326,10 @@ def ensure_checkout(solutions, revisions, first_sln, target_os, target_os_only, |
if not buildspec: |
# Run deps2git if there is a DEPS change after the last .DEPS.git commit. |
for solution in solutions: |
- ensure_deps2git(solution, shallow) |
+ ensure_deps2git(solution, shallow, git_cache_dir) |
# Ensure our build/ directory is set up with the correct .gclient file. |
- gclient_configure(solutions, target_os, target_os_only) |
+ gclient_configure(solutions, target_os, target_os_only, git_cache_dir) |
# Let gclient do the DEPS syncing. |
# The branch-head refspec is a special case because its possible Chrome |
@@ -1371,7 +1366,7 @@ def ensure_checkout(solutions, revisions, first_sln, target_os, target_os_only, |
# Reset the deps_file point in the solutions so that hooks get run properly. |
for sln in solutions: |
sln['deps_file'] = sln.get('deps_file', 'DEPS').replace('.DEPS.git', 'DEPS') |
- gclient_configure(solutions, target_os, target_os_only) |
+ gclient_configure(solutions, target_os, target_os_only, git_cache_dir) |
return gclient_output |
@@ -1494,6 +1489,8 @@ def parse_args(): |
parse.add_option('--with_branch_heads', action='store_true', |
help='Always pass --with_branch_heads to gclient. This ' |
'does the same thing as --refs +refs/branch-heads/*') |
+ parse.add_option('--git-cache-dir', default=path.join(SLAVE_DIR, 'cache_dir'), |
+ help='Path to git cache directory.') |
options, args = parse.parse_args() |
@@ -1520,6 +1517,12 @@ def parse_args(): |
% (str(e),) |
) |
+ # Because we print CACHE_DIR out into a .gclient file, and then later run |
+ # eval() on it, backslashes need to be escaped, otherwise "E:\b\build" gets |
+ # parsed as "E:[\x08][\x08]uild". |
+ if sys.platform.startswith('win'): |
+ options.git_cache_dir = options.git_cache_dir.replace('\\', '\\\\') |
+ |
return options, args |
@@ -1605,7 +1608,8 @@ def checkout(options, git_slns, specs, buildspec, master, |
# Finally, extra configurations such as shallowness of the clone. |
shallow=options.shallow, |
- refs=options.refs) |
+ refs=options.refs, |
+ git_cache_dir=options.git_cache_dir) |
gclient_output = ensure_checkout(**checkout_parameters) |
except GclientSyncFailed: |
print 'We failed gclient sync, lets delete the checkout and retry.' |