Index: gclient.py |
diff --git a/gclient.py b/gclient.py |
index 9a654c752d74801c83d3c1fb6127977ebfb4b59d..63c919acd78d3e45139ed3fcd0f218e25f36794e 100644 |
--- a/gclient.py |
+++ b/gclient.py |
@@ -161,17 +161,14 @@ class Dependency(GClientKeywords): |
# solution. A indirect one is one that was loaded with From() or that |
# exceeded recursion limit. |
self.direct_reference = False |
+ # This dependency has been processed, i.e. checked out |
+ self.processed = False |
+ # This dependency had its hook run |
+ self.hooks_ran = False |
# Sanity checks |
if not self.name and self.parent: |
raise gclient_utils.Error('Dependency without name') |
- # TODO(maruel): http://crbug.com/50015 Reenable this check once |
- # self.tree(False) is corrected. |
- # tree = dict((d.name, d) for d in self.tree(False)) |
- #if self.name in tree: |
- # raise gclient_utils.Error( |
- # 'Dependency %s specified more than once:\n %s\nvs\n %s' % |
- # (self.name, tree[self.name].hierarchy(), self.hierarchy())) |
if not isinstance(self.url, |
(basestring, self.FromImpl, self.FileImpl, None.__class__)): |
raise gclient_utils.Error('dependency url must be either a string, None, ' |
@@ -189,9 +186,10 @@ class Dependency(GClientKeywords): |
self.parsed_url)) |
elif isinstance(url, self.FromImpl): |
ref = [dep for dep in self.tree(True) if url.module_name == dep.name] |
- if not len(ref) == 1: |
- raise Exception('Failed to find one reference to %s. %s' % ( |
- url.module_name, ref)) |
+ if not ref: |
+ raise gclient_utils.Error('Failed to find one reference to %s. %s' % ( |
+ url.module_name, ref)) |
+ # It may happen that len(ref) > 1 but it's no big deal. |
ref = ref[0] |
sub_target = url.sub_target_name or self.name |
# Make sure the referenced dependency DEPS file is loaded and file the |
@@ -203,7 +201,8 @@ class Dependency(GClientKeywords): |
found_dep = d |
break |
if not found_dep: |
- raise Exception('Couldn\'t find %s in %s, referenced by %s' % ( |
+ raise gclient_utils.Error( |
+ 'Couldn\'t find %s in %s, referenced by %s' % ( |
sub_target, ref.name, self.name)) |
# Call LateOverride() again. |
self.parsed_url = found_dep.LateOverride(found_dep.url) |
@@ -331,6 +330,7 @@ class Dependency(GClientKeywords): |
self._file_list = [os.path.join(self.name, f.strip()) |
for f in self._file_list] |
options.revision = None |
+ self.processed = True |
if pm: |
# The + 1 comes from the fact that .gclient is considered a step in |
# itself, .i.e. this code is called one time for the .gclient. This is not |
@@ -396,6 +396,7 @@ class Dependency(GClientKeywords): |
def _RunHookAction(self, hook_dict, matching_file_list): |
"""Runs the action from a single hook.""" |
+ self.hooks_ran = True |
logging.info(hook_dict) |
logging.info(matching_file_list) |
command = hook_dict['action'][:] |
@@ -452,7 +453,8 @@ class Dependency(GClientKeywords): |
def __str__(self): |
out = [] |
for i in ('name', 'url', 'safesync_url', 'custom_deps', 'custom_vars', |
- 'deps_hooks', '_file_list'): |
+ 'deps_hooks', '_file_list', 'processed', |
+ 'hooks_ran'): |
# 'deps_file' |
if self.__dict__[i]: |
out.append('%s: %s' % (i, self.__dict__[i])) |
@@ -760,6 +762,7 @@ solutions = [ |
if not entry is entries[-1]: |
line += ';' |
print line |
+ logging.debug(str(self)) |
def ParseDepsFile(self, direct_reference): |
"""No DEPS to parse for a .gclient file.""" |