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

Unified Diff: gclient.py

Issue 3109003: Improve logging and exceptions. (Closed)
Patch Set: Created 10 years, 4 months 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: gclient.py
diff --git a/gclient.py b/gclient.py
index 96eee3ac4f51a14a23a64d8962fdc49cce124e32..70fad2d423b6fbddcafbd49a3d0ff5eb225dcfc9 100644
--- a/gclient.py
+++ b/gclient.py
@@ -185,7 +185,7 @@ class Dependency(GClientKeywords):
self.url because it may called with other urls due to From()."""
overriden_url = self.get_custom_deps(self.name, url)
if overriden_url != url:
- logging.debug('%s, %s was overriden to %s' % (self.name, url,
+ logging.info('%s, %s was overriden to %s' % (self.name, url,
overriden_url))
return overriden_url
elif isinstance(url, self.FromImpl):
@@ -206,11 +206,11 @@ class Dependency(GClientKeywords):
break
if not found_dep:
raise gclient_utils.Error(
- 'Couldn\'t find %s in %s, referenced by %s' % (
- sub_target, ref.name, self.name))
+ 'Couldn\'t find %s in %s, referenced by %s\n%s' % (
+ sub_target, ref.name, self.name, str(self.root_parent())))
# Call LateOverride() again.
parsed_url = found_dep.LateOverride(found_dep.url)
- logging.debug('%s, %s to %s' % (self.name, url, parsed_url))
+ logging.info('%s, %s to %s' % (self.name, url, parsed_url))
return parsed_url
elif isinstance(url, basestring):
parsed_url = urlparse.urlparse(url)
@@ -228,11 +228,11 @@ class Dependency(GClientKeywords):
parsed_url = scm.FullUrlForRelativeUrl(url)
else:
parsed_url = url
- logging.debug('%s, %s -> %s' % (self.name, url, parsed_url))
+ logging.info('%s, %s -> %s' % (self.name, url, parsed_url))
return parsed_url
elif isinstance(url, self.FileImpl):
parsed_url = url
- logging.debug('%s, %s -> %s (File)' % (self.name, url, parsed_url))
+ logging.info('%s, %s -> %s (File)' % (self.name, url, parsed_url))
return parsed_url
elif url is None:
return None
@@ -246,12 +246,15 @@ class Dependency(GClientKeywords):
# directly referenced.
self.direct_reference = direct_reference
if self.deps_parsed:
+ logging.debug('%s was already parsed' % self.name)
return
self.deps_parsed = True
filepath = os.path.join(self.root_dir(), self.name, self.deps_file)
if not os.path.isfile(filepath):
+ logging.info('%s: No DEPS file found at %s' % (self.name, filepath))
return
deps_content = gclient_utils.FileRead(filepath)
+ logging.debug(deps_content)
# Eval the content.
# One thing is unintuitive, vars= {} must happen before Var() use.
@@ -305,7 +308,9 @@ class Dependency(GClientKeywords):
# Convert the deps into real Dependency.
for name, url in deps.iteritems():
if name in [s.name for s in self.dependencies]:
- raise
+ raise gclient_utils.Error(
+ 'The same name "%s" appears multiple times in the deps section' %
+ name)
self.dependencies.append(Dependency(self, name, url, None, None, None,
None))
# Sorting by name would in theory make the whole thing coherent, since
@@ -314,7 +319,7 @@ class Dependency(GClientKeywords):
# later. But if this would be removed right now, many projects wouldn't be
# able to sync anymore.
self.dependencies.sort(key=lambda x: x.name)
- logging.info('Loaded: %s' % str(self))
+ logging.debug('Loaded: %s' % str(self))
def RunCommandRecursively(self, options, revision_overrides,
command, args, pm):
@@ -410,9 +415,12 @@ class Dependency(GClientKeywords):
def _RunHookAction(self, hook_dict, matching_file_list):
"""Runs the action from a single hook."""
+ # A single DEPS file can specify multiple hooks so this function can be
+ # called multiple times on a single Dependency.
+ #assert self.hooks_ran == False
self.hooks_ran = True
- logging.info(hook_dict)
- logging.info(matching_file_list)
+ logging.debug(hook_dict)
+ logging.debug(matching_file_list)
command = hook_dict['action'][:]
if command[0] == 'python':
# If the hook specified "python" as the first item, the action is a
@@ -466,9 +474,9 @@ class Dependency(GClientKeywords):
def __str__(self):
out = []
- for i in ('name', 'url', 'safesync_url', 'custom_deps', 'custom_vars',
- 'deps_hooks', '_file_list', 'processed',
- 'hooks_ran'):
+ for i in ('name', 'url', 'parsed_url', 'safesync_url', 'custom_deps',
+ 'custom_vars', 'deps_hooks', '_file_list', 'processed',
+ 'hooks_ran', 'deps_parsed'):
# 'deps_file'
if self.__dict__[i]:
out.append('%s: %s' % (i, self.__dict__[i]))
@@ -490,6 +498,13 @@ class Dependency(GClientKeywords):
i = i.parent
return out
+ def root_parent(self):
+ """Returns the root object, normally a GClient object."""
+ d = self
+ while d.parent:
+ d = d.parent
+ return d
+
class GClient(Dependency):
"""Object that represent a gclient checkout. A tree of Dependency(), one per
@@ -776,7 +791,7 @@ solutions = [
if not entry is entries[-1]:
line += ';'
print line
- logging.debug(str(self))
+ logging.info(str(self))
def ParseDepsFile(self, direct_reference):
"""No DEPS to parse for a .gclient file."""
« 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