Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Unified Diff: fetch.py

Issue 106403003: fetch.py: Use '--nohooks' when calling 'gclient sync' (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Address Dirk's notes. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: fetch.py
diff --git a/fetch.py b/fetch.py
index c78dfe722b9ca060075b647d8c1624c364375c66..4bfc6cb54a45cfdfe2dc2e80c078beddf6635e0e 100755
--- a/fetch.py
+++ b/fetch.py
@@ -19,6 +19,7 @@ These parameters will be passed through to the recipe's main method.
"""
import json
+import optparse
import os
import subprocess
import sys
@@ -29,7 +30,6 @@ from distutils import spawn
SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__))
-
#################################################
# Checkout class definitions.
#################################################
@@ -43,9 +43,9 @@ class Checkout(object):
|root|: the directory into which the checkout will be performed, as returned
by the recipe. This is a relative path from |base|.
"""
- def __init__(self, dryrun, spec, root):
+ def __init__(self, options, spec, root):
self.base = os.getcwd()
- self.dryrun = dryrun
+ self.options = options
self.spec = spec
self.root = root
@@ -60,7 +60,7 @@ class Checkout(object):
def run(self, cmd, **kwargs):
print 'Running: %s' % (' '.join(pipes.quote(x) for x in cmd))
- if self.dryrun:
+ if self.options.dryrun:
return 0
return subprocess.check_call(cmd, **kwargs)
@@ -97,8 +97,8 @@ class SvnCheckout(Checkout):
class GclientGitCheckout(GclientCheckout, GitCheckout):
- def __init__(self, dryrun, spec, root):
- super(GclientGitCheckout, self).__init__(dryrun, spec, root)
+ def __init__(self, options, spec, root):
+ super(GclientGitCheckout, self).__init__(options, spec, root)
assert 'solutions' in self.spec
keys = ['solutions', 'target_os', 'target_os_only']
gclient_spec = '\n'.join('%s = %s' % (key, self.spec[key])
@@ -114,11 +114,14 @@ class GclientGitCheckout(GclientCheckout, GitCheckout):
# Configure and do the gclient checkout.
self.run_gclient('config', '--spec', self.spec['gclient_spec'])
- self.run_gclient('sync')
+ if self.options.nohooks:
+ self.run_gclient('sync', '--nohooks')
+ else:
+ self.run_gclient('sync')
# Configure git.
wd = os.path.join(self.base, self.root)
- if self.dryrun:
+ if self.options.dryrun:
print 'cd %s' % wd
self.run_git(
'submodule', 'foreach',
@@ -129,8 +132,8 @@ class GclientGitCheckout(GclientCheckout, GitCheckout):
class GclientGitSvnCheckout(GclientGitCheckout, SvnCheckout):
- def __init__(self, dryrun, spec, root):
- super(GclientGitSvnCheckout, self).__init__(dryrun, spec, root)
+ def __init__(self, options, spec, root):
+ super(GclientGitSvnCheckout, self).__init__(options, spec, root)
assert 'svn_url' in self.spec
assert 'svn_branch' in self.spec
assert 'svn_ref' in self.spec
@@ -154,7 +157,7 @@ class GclientGitSvnCheckout(GclientGitCheckout, SvnCheckout):
if real_path != self.root:
real_path = os.path.join(self.root, real_path)
wd = os.path.join(self.base, real_path)
- if self.dryrun:
+ if self.options.dryrun:
print 'cd %s' % wd
self.run_git('svn', 'init', '--prefix=origin/', '-T',
svn_spec['svn_branch'], svn_spec['svn_url'], cwd=wd)
@@ -173,12 +176,12 @@ CHECKOUT_TYPE_MAP = {
}
-def CheckoutFactory(type_name, dryrun, spec, root):
+def CheckoutFactory(type_name, options, spec, root):
"""Factory to build Checkout class instances."""
class_ = CHECKOUT_TYPE_MAP.get(type_name)
if not class_:
raise KeyError('unrecognized checkout type: %s' % type_name)
- return class_(dryrun, spec, root)
+ return class_(options, spec, root)
#################################################
@@ -191,7 +194,16 @@ def usage(msg=None):
print (
"""
-usage: %s [-n|--dry-run] <recipe> [--property=value [--property2=value2 ...]]
+usage: %s [options] <recipe> [--property=value [--property2=value2 ...]]
+
+This script can be used to download the Chromium sources. See
+http://www.chromium.org/developers/how-tos/get-the-code
+for full usage instructions.
+
+Valid options:
+ -h, --help, help Print this message.
+ --nohooks Don't run hooks after checkout.
+ -n, --dryrun Don't run commands, only print them.
""" % os.path.basename(sys.argv[0]))
sys.exit(bool(msg))
@@ -204,9 +216,18 @@ def handle_args(argv):
usage()
dryrun = False
- if argv[1] in ('-n', '--dry-run'):
- dryrun = True
+ nohooks = False
+ while len(argv) >= 2:
+ arg = argv[1]
+ if not arg.startswith('-'):
+ break
argv.pop(1)
+ if arg in ('-n', '--dry-run'):
+ dryrun = True
+ elif arg == '--nohooks':
+ nohooks = True
+ else:
+ usage('Invalid option %s.' % arg)
def looks_like_arg(arg):
return arg.startswith('--') and arg.count('=') == 1
@@ -217,7 +238,7 @@ def handle_args(argv):
recipe = argv[1]
props = argv[2:]
- return dryrun, recipe, props
+ return optparse.Values({'dryrun':dryrun, 'nohooks':nohooks }), recipe, props
def run_recipe_fetch(recipe, props, aliased=False):
@@ -242,11 +263,11 @@ def run_recipe_fetch(recipe, props, aliased=False):
return spec, root
-def run(dryrun, spec, root):
+def run(options, spec, root):
"""Perform a checkout with the given type and configuration.
Args:
- dryrun: if True, don't actually execute the commands
+ options: Options instance.
spec: Checkout configuration returned by the the recipe's fetch_spec
method (checkout type, repository url, etc.).
root: The directory into which the repo expects to be checkout out.
@@ -255,7 +276,7 @@ def run(dryrun, spec, root):
checkout_type = spec['type']
checkout_spec = spec['%s_spec' % checkout_type]
try:
- checkout = CheckoutFactory(checkout_type, dryrun, checkout_spec, root)
+ checkout = CheckoutFactory(checkout_type, options, checkout_spec, root)
except KeyError:
return 1
if checkout.exists():
@@ -269,9 +290,9 @@ def run(dryrun, spec, root):
def main():
- dryrun, recipe, props = handle_args(sys.argv)
+ options, recipe, props = handle_args(sys.argv)
spec, root = run_recipe_fetch(recipe, props)
- return run(dryrun, spec, root)
+ return run(options, spec, root)
if __name__ == '__main__':
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698