Index: gclient.py |
diff --git a/gclient.py b/gclient.py |
index 5e960aa5a940f32b80ef858acf340165894714e0..748c6dc10213ffec625684a1451f37be11cdb0d1 100644 |
--- a/gclient.py |
+++ b/gclient.py |
@@ -85,15 +85,85 @@ def attr(attr, data): |
## GClient implementation. |
-class GClient(object): |
+class GClientKeywords(object): |
+ class FromImpl(object): |
+ """Used to implement the From() syntax.""" |
+ |
+ def __init__(self, module_name, sub_target_name=None): |
+ """module_name is the dep module we want to include from. It can also be |
+ the name of a subdirectory to include from. |
+ |
+ sub_target_name is an optional parameter if the module name in the other |
+ DEPS file is different. E.g., you might want to map src/net to net.""" |
+ self.module_name = module_name |
+ self.sub_target_name = sub_target_name |
+ |
+ def __str__(self): |
+ return 'From(%s, %s)' % (repr(self.module_name), |
+ repr(self.sub_target_name)) |
+ |
+ def GetUrl(self, target_name, sub_deps_base_url, root_dir, sub_deps): |
+ """Resolve the URL for this From entry.""" |
+ sub_deps_target_name = target_name |
+ if self.sub_target_name: |
+ sub_deps_target_name = self.sub_target_name |
+ url = sub_deps[sub_deps_target_name] |
+ if url.startswith('/'): |
+ # If it's a relative URL, we need to resolve the URL relative to the |
+ # sub deps base URL. |
+ if not isinstance(sub_deps_base_url, basestring): |
+ sub_deps_base_url = sub_deps_base_url.GetPath() |
+ scm = gclient_scm.CreateSCM(sub_deps_base_url, root_dir, |
+ None) |
+ url = scm.FullUrlForRelativeUrl(url) |
+ return url |
+ |
+ class FileImpl(object): |
+ """Used to implement the File('') syntax which lets you sync a single file |
+ from an SVN repo.""" |
+ |
+ def __init__(self, file_location): |
+ self.file_location = file_location |
+ |
+ def __str__(self): |
+ return 'File("%s")' % self.file_location |
+ |
+ def GetPath(self): |
+ return os.path.split(self.file_location)[0] |
+ |
+ def GetFilename(self): |
+ rev_tokens = self.file_location.split('@') |
+ return os.path.split(rev_tokens[0])[1] |
+ |
+ def GetRevision(self): |
+ rev_tokens = self.file_location.split('@') |
+ if len(rev_tokens) > 1: |
+ return rev_tokens[1] |
+ return None |
+ |
+ class VarImpl(object): |
+ def __init__(self, custom_vars, local_scope): |
+ self._custom_vars = custom_vars |
+ self._local_scope = local_scope |
+ |
+ def Lookup(self, var_name): |
+ """Implements the Var syntax.""" |
+ if var_name in self._custom_vars: |
+ return self._custom_vars[var_name] |
+ elif var_name in self._local_scope.get("vars", {}): |
+ return self._local_scope["vars"][var_name] |
+ raise gclient_utils.Error("Var is not defined: %s" % var_name) |
+ |
+ |
+class GClient(GClientKeywords): |
"""Object that represent a gclient checkout.""" |
- supported_commands = [ |
+ SUPPORTED_COMMANDS = [ |
'cleanup', 'diff', 'export', 'pack', 'revert', 'status', 'update', |
'runhooks' |
] |
- deps_os_choices = { |
+ DEPS_OS_CHOICES = { |
"win32": "win", |
"win": "win", |
"cygwin": "win", |
@@ -137,13 +207,13 @@ solutions = [ |
def __init__(self, root_dir, options): |
self._root_dir = root_dir |
self._options = options |
- self._config_content = None |
+ self.config_content = None |
self._config_dict = {} |
self._deps_hooks = [] |
def SetConfig(self, content): |
self._config_dict = {} |
- self._config_content = content |
+ self.config_content = content |
try: |
exec(content, self._config_dict) |
except SyntaxError, e: |
@@ -164,16 +234,13 @@ solutions = [ |
def SaveConfig(self): |
gclient_utils.FileWrite(os.path.join(self._root_dir, |
self._options.config_filename), |
- self._config_content) |
+ self.config_content) |
def _LoadConfig(self): |
client_source = gclient_utils.FileRead( |
os.path.join(self._root_dir, self._options.config_filename)) |
self.SetConfig(client_source) |
- def ConfigContent(self): |
- return self._config_content |
- |
def GetVar(self, key, default=None): |
return self._config_dict.get(key, default) |
@@ -239,74 +306,6 @@ solutions = [ |
exec(gclient_utils.FileRead(filename), scope) |
return scope["entries"] |
- class FromImpl: |
- """Used to implement the From syntax.""" |
- |
- def __init__(self, module_name, sub_target_name=None): |
- """module_name is the dep module we want to include from. It can also be |
- the name of a subdirectory to include from. |
- |
- sub_target_name is an optional parameter if the module name in the other |
- DEPS file is different. E.g., you might want to map src/net to net.""" |
- self.module_name = module_name |
- self.sub_target_name = sub_target_name |
- |
- def __str__(self): |
- return 'From(%s, %s)' % (repr(self.module_name), |
- repr(self.sub_target_name)) |
- |
- def GetUrl(self, target_name, sub_deps_base_url, root_dir, sub_deps): |
- """Resolve the URL for this From entry.""" |
- sub_deps_target_name = target_name |
- if self.sub_target_name: |
- sub_deps_target_name = self.sub_target_name |
- url = sub_deps[sub_deps_target_name] |
- if url.startswith('/'): |
- # If it's a relative URL, we need to resolve the URL relative to the |
- # sub deps base URL. |
- if not isinstance(sub_deps_base_url, basestring): |
- sub_deps_base_url = sub_deps_base_url.GetPath() |
- scm = gclient_scm.CreateSCM(sub_deps_base_url, root_dir, |
- None) |
- url = scm.FullUrlForRelativeUrl(url) |
- return url |
- |
- class FileImpl: |
- """Used to implement the File('') syntax which lets you sync a single file |
- from an SVN repo.""" |
- |
- def __init__(self, file_location): |
- self.file_location = file_location |
- |
- def __str__(self): |
- return 'File("%s")' % self.file_location |
- |
- def GetPath(self): |
- return os.path.split(self.file_location)[0] |
- |
- def GetFilename(self): |
- rev_tokens = self.file_location.split('@') |
- return os.path.split(rev_tokens[0])[1] |
- |
- def GetRevision(self): |
- rev_tokens = self.file_location.split('@') |
- if len(rev_tokens) > 1: |
- return rev_tokens[1] |
- return None |
- |
- class _VarImpl: |
- def __init__(self, custom_vars, local_scope): |
- self._custom_vars = custom_vars |
- self._local_scope = local_scope |
- |
- def Lookup(self, var_name): |
- """Implements the Var syntax.""" |
- if var_name in self._custom_vars: |
- return self._custom_vars[var_name] |
- elif var_name in self._local_scope.get("vars", {}): |
- return self._local_scope["vars"][var_name] |
- raise gclient_utils.Error("Var is not defined: %s" % var_name) |
- |
def _ParseSolutionDeps(self, solution_name, solution_deps_content, |
custom_vars, parse_hooks): |
"""Parses the DEPS file for the specified solution. |
@@ -325,7 +324,7 @@ solutions = [ |
return {} |
# Eval the content |
local_scope = {} |
- var = self._VarImpl(custom_vars, local_scope) |
+ var = self.VarImpl(custom_vars, local_scope) |
global_scope = { |
"File": self.FileImpl, |
"From": self.FromImpl, |
@@ -341,9 +340,9 @@ solutions = [ |
if self._options.deps_os is not None: |
deps_to_include = self._options.deps_os.split(",") |
if "all" in deps_to_include: |
- deps_to_include = list(set(self.deps_os_choices.itervalues())) |
+ deps_to_include = list(set(self.DEPS_OS_CHOICES.itervalues())) |
else: |
- deps_to_include = [self.deps_os_choices.get(sys.platform, "unix")] |
+ deps_to_include = [self.DEPS_OS_CHOICES.get(sys.platform, "unix")] |
deps_to_include = set(deps_to_include) |
for deps_os_key in deps_to_include: |
@@ -547,7 +546,7 @@ solutions = [ |
Raises: |
Error: If the client has conflicting entries. |
""" |
- if not command in self.supported_commands: |
+ if not command in self.SUPPORTED_COMMANDS: |
raise gclient_utils.Error("'%s' is an unsupported command" % command) |
solutions = self.GetVar("solutions") |
@@ -793,7 +792,7 @@ solutions = [ |
config = self.DEFAULT_SNAPSHOT_FILE_TEXT % {'solution_list': new_gclient} |
snapclient = GClient(self._root_dir, self._options) |
snapclient.SetConfig(config) |
- print(snapclient._config_content) |
+ print(snapclient.config_content) |
#### gclient commands. |
@@ -815,7 +814,7 @@ Mostly svn-specific. Simply runs 'svn cleanup' for each module. |
if options.verbose: |
# Print out the .gclient file. This is longer than if we just printed the |
# client dict, but more legible, and it might contain helpful comments. |
- print(client.ConfigContent()) |
+ print(client.config_content) |
return client.RunOnDeps('cleanup', args) |
@@ -878,7 +877,7 @@ def CMDexport(parser, args): |
if options.verbose: |
# Print out the .gclient file. This is longer than if we just printed the |
# client dict, but more legible, and it might contain helpful comments. |
- print(client.ConfigContent()) |
+ print(client.config_content) |
return client.RunOnDeps('export', args) |
@@ -905,7 +904,7 @@ checked out tree via 'patch -p0 < patchfile'. |
if options.verbose: |
# Print out the .gclient file. This is longer than if we just printed the |
# client dict, but more legible, and it might contain helpful comments. |
- print(client.ConfigContent()) |
+ print(client.config_content) |
return client.RunOnDeps('pack', args) |
@@ -922,7 +921,7 @@ def CMDstatus(parser, args): |
if options.verbose: |
# Print out the .gclient file. This is longer than if we just printed the |
# client dict, but more legible, and it might contain helpful comments. |
- print(client.ConfigContent()) |
+ print(client.config_content) |
return client.RunOnDeps('status', args) |
@@ -977,7 +976,7 @@ def CMDsync(parser, args): |
if options.verbose: |
# Print out the .gclient file. This is longer than if we just printed the |
# client dict, but more legible, and it might contain helpful comments. |
- print(client.ConfigContent()) |
+ print(client.config_content) |
return client.RunOnDeps('update', args) |
@@ -998,7 +997,7 @@ def CMDdiff(parser, args): |
if options.verbose: |
# Print out the .gclient file. This is longer than if we just printed the |
# client dict, but more legible, and it might contain helpful comments. |
- print(client.ConfigContent()) |
+ print(client.config_content) |
return client.RunOnDeps('diff', args) |
@@ -1034,7 +1033,7 @@ def CMDrunhooks(parser, args): |
if options.verbose: |
# Print out the .gclient file. This is longer than if we just printed the |
# client dict, but more legible, and it might contain helpful comments. |
- print(client.ConfigContent()) |
+ print(client.config_content) |
options.force = True |
options.nohooks = False |
return client.RunOnDeps('runhooks', args) |