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

Unified Diff: gclient.py

Issue 7909012: Retry "Initial step into making Dependency thread safe"" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: rebase against head Created 9 years, 3 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 | gclient_utils.py » ('j') | 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 c038738c10d2d7d45793f947651ebf7edb460970..046b4fc8907cff8df035222a833bd15a05a48342 100644
--- a/gclient.py
+++ b/gclient.py
@@ -145,9 +145,8 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem):
# self.dependencies and self.requirements are read and modified from
# multiple threads at the same time. Sad.
GClientKeywords.__init__(self)
- gclient_utils.WorkItem.__init__(self)
+ gclient_utils.WorkItem.__init__(self, name)
self.parent = parent
- self.name = name
self.url = url
self.parsed_url = None
# These 2 are only set in .gclient and not in DEPS files.
@@ -169,8 +168,6 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem):
self.processed = False
# This dependency had its hook run
self.hooks_ran = False
- # Required dependencies to run before running this one:
- self.requirements = set()
# Post process the url to remove trailing slashes.
if isinstance(self.url, basestring):
@@ -201,7 +198,7 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem):
# self.parent is implicitly a requirement. This will be recursive by
# definition.
if self.parent and self.parent.name:
- self.requirements.add(self.parent.name)
+ self._requirements.add(self.parent.name)
# For a tree with at least 2 levels*, the leaf node needs to depend
# on the level higher up in an orderly way.
@@ -219,10 +216,10 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem):
for i in range(0, root_deps.index(self.parent)):
value = root_deps[i]
if value.name:
- self.requirements.add(value.name)
+ self._requirements.add(value.name)
if isinstance(self.url, self.FromImpl):
- self.requirements.add(self.url.module_name)
+ self._requirements.add(self.url.module_name)
if self.name and self.should_process:
def yield_full_tree(root):
@@ -238,10 +235,16 @@ class Dependency(GClientKeywords, gclient_utils.WorkItem):
continue
# Step 1: Find any requirements self may need.
if self.name.startswith(posixpath.join(obj.name, '')):
- self.requirements.add(obj.name)
+ self._requirements.add(obj.name)
# Step 2: Find any requirements self may impose.
if obj.name.startswith(posixpath.join(self.name, '')):
- obj.requirements.add(self.name)
+ try:
+ # Access to a protected member _requirements of a client class
+ # pylint: disable=W0212
+ obj.lock.acquire()
+ obj._requirements.add(self.name)
+ finally:
+ obj.lock.release()
def LateOverride(self, url):
"""Resolves the parsed url from url.
« no previous file with comments | « no previous file | gclient_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698