Index: fetch.py |
diff --git a/fetch.py b/fetch.py |
index 2109017b3da310fb244625f8caab1ca22c536bfb..2b89675e965dd7f38652589f69828b6eccd190eb 100755 |
--- a/fetch.py |
+++ b/fetch.py |
@@ -41,8 +41,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, spec, root): |
+ def __init__(self, dryrun, spec, root): |
self.base = os.getcwd() |
+ self.dryrun = dryrun |
self.spec = spec |
self.root = root |
@@ -58,24 +59,24 @@ class Checkout(object): |
class GclientCheckout(Checkout): |
- @staticmethod |
- def run_gclient(*cmd, **kwargs): |
+ def run_gclient(self, *cmd, **kwargs): |
print 'Running: gclient %s' % ' '.join(pipes.quote(x) for x in cmd) |
- return subprocess.check_call(('gclient',) + cmd, **kwargs) |
+ if not self.dryrun: |
+ return subprocess.check_call(('gclient',) + cmd, **kwargs) |
class GitCheckout(Checkout): |
- @staticmethod |
- def run_git(*cmd, **kwargs): |
+ def run_git(self, *cmd, **kwargs): |
print 'Running: git %s' % ' '.join(pipes.quote(x) for x in cmd) |
- return subprocess.check_call(('git',) + cmd, **kwargs) |
+ if not self.dryrun: |
+ return subprocess.check_call(('git',) + cmd, **kwargs) |
class GclientGitSvnCheckout(GclientCheckout, GitCheckout): |
- def __init__(self, spec, root): |
- super(GclientGitSvnCheckout, self).__init__(spec, root) |
+ def __init__(self, dryrun, spec, root): |
+ super(GclientGitSvnCheckout, self).__init__(dryrun, spec, root) |
assert 'solutions' in self.spec |
keys = ['solutions', 'target_os', 'target_os_only'] |
gclient_spec = '\n'.join('%s = %s' % (key, self.spec[key]) |
@@ -129,12 +130,12 @@ CHECKOUT_TYPE_MAP = { |
} |
-def CheckoutFactory(type_name, spec, root): |
+def CheckoutFactory(type_name, dryrun, 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_(spec, root) |
+ return class_(dryrun, spec, root) |
################################################# |
@@ -147,7 +148,7 @@ def usage(msg=None): |
print ( |
""" |
-usage: %s <recipe> [--property=value [--property2=value2 ...]] |
+usage: %s [-n|--dry-run] <recipe> [--property=value [--property2=value2 ...]] |
""" % os.path.basename(sys.argv[0])) |
sys.exit(bool(msg)) |
@@ -159,6 +160,10 @@ def handle_args(argv): |
if argv[1] in ('-h', '--help', 'help'): |
usage() |
+ if argv[1] in ('-n', '--dry-run'): |
+ dryrun = True |
+ argv.pop(1) |
agable
2013/04/03 21:07:00
This is the best way to do it for now.
I'll look
|
+ |
def looks_like_arg(arg): |
return arg.startswith('--') and arg.count('=') == 1 |
@@ -168,7 +173,7 @@ def handle_args(argv): |
recipe = argv[1] |
props = argv[2:] |
- return recipe, props |
+ return dryrun, recipe, props |
def run_recipe_fetch(recipe, props, aliased=False): |
@@ -188,10 +193,11 @@ def run_recipe_fetch(recipe, props, aliased=False): |
return spec, root |
-def run(spec, root): |
+def run(dryrun, spec, root): |
"""Perform a checkout with the given type and configuration. |
Args: |
+ dryrun: if True, don't actually execute the commands |
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. |
@@ -200,7 +206,7 @@ def run(spec, root): |
checkout_type = spec['type'] |
checkout_spec = spec['%s_spec' % checkout_type] |
try: |
- checkout = CheckoutFactory(checkout_type, checkout_spec, root) |
+ checkout = CheckoutFactory(checkout_type, dryrun, checkout_spec, root) |
except KeyError: |
return 1 |
if checkout.exists(): |
@@ -212,9 +218,9 @@ def run(spec, root): |
def main(): |
- recipe, props = handle_args(sys.argv) |
+ dryrun, recipe, props = handle_args(sys.argv) |
spec, root = run_recipe_fetch(recipe, props) |
- return run(spec, root) |
+ return run(dryrun, spec, root) |
if __name__ == '__main__': |