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

Unified Diff: gclient.py

Issue 1730014: Revert r45652 and r45653. It broke the single file export... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 10 years, 8 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
===================================================================
--- gclient.py (revision 45659)
+++ gclient.py (working copy)
@@ -58,7 +58,6 @@
__author__ = "darinf@gmail.com (Darin Fisher)"
__version__ = "0.3.4"
-import copy
import errno
import logging
import optparse
@@ -699,17 +698,6 @@
if matching_file_list:
self._RunHookAction(hook_dict, matching_file_list)
- def GetSCMCommandClosure(self, path, url, revision, command, args, file_list):
- """Gets a closure that runs a SCM command on a particular dependency."""
- def _Closure():
- logging.debug("Running %s in %s to %s %s" % (command, path, url,
- revision))
- options = copy.copy(self._options)
- options.revision = revision
- scm = gclient_scm.CreateSCM(url, self._root_dir, path)
- scm.RunCommand(command, options, args, file_list)
- return _Closure
-
def RunOnDeps(self, command, args):
"""Runs a command on each dependency in a client and its dependencies.
@@ -750,126 +738,85 @@
entries = {}
entries_deps_content = {}
+ file_list = []
+ # Run on the base solutions first.
+ for solution in solutions:
+ name = solution["name"]
+ deps_file = solution.get("deps_file", self._options.deps_file)
+ if '/' in deps_file or '\\' in deps_file:
+ raise gclient_utils.Error('deps_file name must not be a path, just a '
+ 'filename.')
+ if name in entries:
+ raise gclient_utils.Error("solution %s specified more than once" % name)
+ url = solution["url"]
+ entries[name] = url
+ if run_scm and url:
+ self._options.revision = revision_overrides.get(name)
+ scm = gclient_scm.CreateSCM(url, self._root_dir, name)
+ scm.RunCommand(command, self._options, args, file_list)
+ file_list = [os.path.join(name, f.strip()) for f in file_list]
+ self._options.revision = None
+ try:
+ deps_content = gclient_utils.FileRead(
+ os.path.join(self._root_dir, name, deps_file))
+ except IOError, e:
+ if e.errno != errno.ENOENT:
+ raise
+ deps_content = ""
+ entries_deps_content[name] = deps_content
- # To avoid threading issues, all file lists get constructed separately then
- # gathered in a flattened list at the end.
- file_list_list = []
- file_list_dict = {}
+ # Process the dependencies next (sort alphanumerically to ensure that
+ # containing directories get populated first and for readability)
+ deps = self._ParseAllDeps(entries, entries_deps_content)
+ deps_to_process = deps.keys()
+ deps_to_process.sort()
- thread_pool = gclient_utils.ThreadPool(self._options.jobs)
- thread_pool.Start()
-
- try:
- # Run on the base solutions first.
- for solution in solutions:
- name = solution["name"]
- deps_file = solution.get("deps_file", self._options.deps_file)
- if '/' in deps_file or '\\' in deps_file:
- raise gclient_utils.Error('deps_file name must not be a path, just a '
- 'filename.')
- if name in entries:
- raise gclient_utils.Error(
- "solution %s specified more than once" % name)
- url = solution["url"]
- entries[name] = url
- if run_scm and url:
- revision = revision_overrides.get(name)
- file_list = []
- file_list_dict[name] = file_list
- thread_pool.AddJob(self.GetSCMCommandClosure(
- name, url, revision, command, args, file_list))
-
- thread_pool.WaitJobs()
-
- for solution in solutions:
- name = solution["name"]
- deps_file = solution.get("deps_file", self._options.deps_file)
- try:
- deps_content = gclient_utils.FileRead(
- os.path.join(self._root_dir, name, deps_file))
- except IOError, e:
- if e.errno != errno.ENOENT:
- raise
- deps_content = ""
- entries_deps_content[name] = deps_content
- try:
- file_list_list.append([os.path.join(name, f.strip())
- for f in file_list_dict[name]])
- except KeyError:
- # We may not have added the file list to the dict, see tests above.
- # Instead of duplicating the tests, it's less fragile to just ignore
- # the exception.
- pass
-
- # Process the dependencies next (sort alphanumerically to ensure that
- # containing directories get populated first and for readability)
- # TODO(piman): when using multiple threads, the ordering is not ensured.
- # In many cases (e.g. updates to an existing checkout where DEPS don't
- # move between directories), it'll still be correct but for completeness
- # this should be fixed.
- deps = self._ParseAllDeps(entries, entries_deps_content)
- deps_to_process = deps.keys()
- deps_to_process.sort()
-
- # First pass for direct dependencies.
+ # First pass for direct dependencies.
+ if command == 'update' and not self._options.verbose:
+ pm = Progress('Syncing projects', len(deps_to_process))
+ for d in deps_to_process:
if command == 'update' and not self._options.verbose:
- pm = Progress('Syncing projects', len(deps_to_process))
-
- for d in deps_to_process:
- if command == 'update' and not self._options.verbose:
- pm.update()
- file_list = []
- file_list_list.append(file_list)
- if type(deps[d]) == str:
- url = deps[d]
- entries[d] = url
- if run_scm:
- revision = revision_overrides.get(d)
- thread_pool.AddJob(self.GetSCMCommandClosure(d, url, revision,
- command, args,
- file_list))
- elif isinstance(deps[d], self.FileImpl):
- file = deps[d]
- if run_scm:
- revision = file.GetRevision()
- thread_pool.AddJob(self.GetSCMCommandClosure(
- d, url, revision, "updatesingle", args + [file.GetFilename()],
- file_list))
-
- thread_pool.WaitJobs()
+ pm.update()
+ if type(deps[d]) == str:
+ url = deps[d]
+ entries[d] = url
+ if run_scm:
+ self._options.revision = revision_overrides.get(d)
+ scm = gclient_scm.CreateSCM(url, self._root_dir, d)
+ scm.RunCommand(command, self._options, args, file_list)
+ self._options.revision = None
+ elif isinstance(deps[d], self.FileImpl):
+ file = deps[d]
+ self._options.revision = file.GetRevision()
+ if run_scm:
+ scm = gclient_scm.CreateSCM(file.GetPath(), self._root_dir, d)
+ scm.RunCommand("updatesingle", self._options,
+ args + [file.GetFilename()], file_list)
- if command == 'update' and not self._options.verbose:
- pm.end()
+ if command == 'update' and not self._options.verbose:
+ pm.end()
- # Second pass for inherited deps (via the From keyword)
- for d in deps_to_process:
- if isinstance(deps[d], self.FromImpl):
- filename = os.path.join(self._root_dir,
- deps[d].module_name,
- self._options.deps_file)
- content = gclient_utils.FileRead(filename)
- sub_deps = self._ParseSolutionDeps(deps[d].module_name, content, {},
- False)
- # Getting the URL from the sub_deps file can involve having to resolve
- # a File() or having to resolve a relative URL. To resolve relative
- # URLs, we need to pass in the orignal sub deps URL.
- sub_deps_base_url = deps[deps[d].module_name]
- url = deps[d].GetUrl(d, sub_deps_base_url, self._root_dir, sub_deps)
- entries[d] = url
- if run_scm:
- revision = revision_overrides.get(d)
- file_list = []
- file_list_list.append(file_list)
- thread_pool.AddJob(self.GetSCMCommandClosure(d, url, revision,
- command, args,
- file_list))
+ # Second pass for inherited deps (via the From keyword)
+ for d in deps_to_process:
+ if isinstance(deps[d], self.FromImpl):
+ filename = os.path.join(self._root_dir,
+ deps[d].module_name,
+ self._options.deps_file)
+ content = gclient_utils.FileRead(filename)
+ sub_deps = self._ParseSolutionDeps(deps[d].module_name, content, {},
+ False)
+ # Getting the URL from the sub_deps file can involve having to resolve
+ # a File() or having to resolve a relative URL. To resolve relative
+ # URLs, we need to pass in the orignal sub deps URL.
+ sub_deps_base_url = deps[deps[d].module_name]
+ url = deps[d].GetUrl(d, sub_deps_base_url, self._root_dir, sub_deps)
+ entries[d] = url
+ if run_scm:
+ self._options.revision = revision_overrides.get(d)
+ scm = gclient_scm.CreateSCM(url, self._root_dir, d)
+ scm.RunCommand(command, self._options, args, file_list)
+ self._options.revision = None
- thread_pool.WaitJobs()
- finally:
- thread_pool.Stop()
-
- file_list = sum(file_list_list, [])
-
# Convert all absolute paths to relative.
for i in range(len(file_list)):
# TODO(phajdan.jr): We should know exactly when the paths are absolute.
@@ -1337,9 +1284,6 @@
option_parser.add_option("", "--gclientfile", default=None,
metavar="FILENAME",
help=("specify an alternate .gclient file"))
- option_parser.add_option("-j", "--jobs", default=1, type="int",
- help=("specify how many SCM commands can run in "
- "parallel"))
if len(argv) < 2:
# Users don't need to be told to use the 'help' command.
« 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