Chromium Code Reviews| Index: gclient.py |
| diff --git a/gclient.py b/gclient.py |
| index eb4b19e93b4580f0274a5eedaac31dbbb9bbf3f7..d6d7262d9aa2d8c9bfa2a45d13d9cd63a092efa9 100755 |
| --- a/gclient.py |
| +++ b/gclient.py |
| @@ -74,14 +74,12 @@ import optparse |
| import os |
| import pprint |
| import re |
| -import stat |
| import sys |
| import urlparse |
| import urllib |
| import gclient_scm |
| import gclient_utils |
| -from gclient_utils import Error, FileRead, FileWrite |
| # default help text |
| DEFAULT_USAGE_TEXT = ( |
| @@ -312,6 +310,7 @@ class GClient(object): |
| exec(content, self._config_dict) |
| except SyntaxError, e: |
| try: |
| + __pychecker__ = 'no-objattrs' |
| # Try to construct a human readable error message |
| error_message = [ |
| 'There is a syntax error in your configuration file.', |
| @@ -322,15 +321,16 @@ class GClient(object): |
| raise e |
| else: |
| # Raise a new exception with the human readable message: |
| - raise Error('\n'.join(error_message)) |
| + raise gclient_utils.Error('\n'.join(error_message)) |
| def SaveConfig(self): |
| - FileWrite(os.path.join(self._root_dir, self._options.config_filename), |
| - self._config_content) |
| + gclient_utils.FileWrite(os.path.join(self._root_dir, |
| + self._options.config_filename), |
| + self._config_content) |
| def _LoadConfig(self): |
| - client_source = FileRead(os.path.join(self._root_dir, |
| - self._options.config_filename)) |
| + client_source = gclient_utils.FileRead( |
| + os.path.join(self._root_dir, self._options.config_filename)) |
| self.SetConfig(client_source) |
| def ConfigContent(self): |
| @@ -377,7 +377,7 @@ class GClient(object): |
| """ |
| text = "entries = \\\n" + pprint.pformat(entries, 2) + '\n' |
| file_path = os.path.join(self._root_dir, self._options.entries_filename) |
| - FileWrite(file_path, text) |
| + gclient_utils.FileWrite(file_path, text) |
| def _ReadEntries(self): |
| """Read the .gclient_entries file for the given client. |
| @@ -393,7 +393,7 @@ class GClient(object): |
| filename = os.path.join(self._root_dir, self._options.entries_filename) |
| if not os.path.exists(filename): |
| return [] |
| - exec(FileRead(filename), scope) |
| + exec(gclient_utils.FileRead(filename), scope) |
| return scope["entries"] |
| class FromImpl: |
| @@ -416,7 +416,7 @@ class GClient(object): |
| return self._custom_vars[var_name] |
| elif var_name in self._local_scope.get("vars", {}): |
| return self._local_scope["vars"][var_name] |
| - raise Error("Var is not defined: %s" % var_name) |
| + raise gclient_utils.Error("Var is not defined: %s" % var_name) |
| def _ParseSolutionDeps(self, solution_name, solution_deps_content, |
| custom_vars): |
| @@ -550,17 +550,17 @@ class GClient(object): |
| # A relative url. Fetch the real base. |
| path = parsed_url[2] |
| if path[0] != "/": |
| - raise Error( |
| + raise gclient_utils.Error( |
| "relative DEPS entry \"%s\" must begin with a slash" % d) |
| # Create a scm just to query the full url. |
| scm = gclient_scm.CreateSCM(solution["url"], self._root_dir, |
| None) |
| url = scm.FullUrlForRelativeUrl(url) |
| if d in deps and deps[d] != url: |
| - raise Error( |
| + raise gclient_utils.Error( |
| "Solutions have conflicting versions of dependency \"%s\"" % d) |
| if d in solution_urls and solution_urls[d] != url: |
| - raise Error( |
| + raise gclient_utils.Error( |
| "Dependency \"%s\" conflicts with specified solution" % d) |
| # Grab the dependency. |
| deps[d] = url |
| @@ -613,7 +613,7 @@ class GClient(object): |
| # match each hook's pattern. |
| for hook_dict in hooks: |
| pattern = re.compile(hook_dict['pattern']) |
| - matching_file_list = [file for file in file_list if pattern.search(file)] |
| + matching_file_list = [f for f in file_list if pattern.search(f)] |
| if matching_file_list: |
| self._RunHookAction(hook_dict, matching_file_list) |
| @@ -630,25 +630,25 @@ class GClient(object): |
| Error: If the client has conflicting entries. |
| """ |
| if not command in self.supported_commands: |
| - raise Error("'%s' is an unsupported command" % command) |
| + raise gclient_utils.Error("'%s' is an unsupported command" % command) |
| # Check for revision overrides. |
| revision_overrides = {} |
| for revision in self._options.revisions: |
| if revision.find("@") == -1: |
| - raise Error( |
| + raise gclient_utils.Error( |
| "Specify the full dependency when specifying a revision number.") |
| revision_elem = revision.split("@") |
| # Disallow conflicting revs |
| if revision_overrides.has_key(revision_elem[0]) and \ |
| revision_overrides[revision_elem[0]] != revision_elem[1]: |
| - raise Error( |
| + raise gclient_utils.Error( |
| "Conflicting revision numbers specified.") |
| revision_overrides[revision_elem[0]] = revision_elem[1] |
| solutions = self.GetVar("solutions") |
| if not solutions: |
| - raise Error("No solution specified") |
| + raise gclient_utils.Error("No solution specified") |
| # When running runhooks --force, there's no need to consult the SCM. |
| # All known hooks are expected to run unconditionally regardless of working |
| @@ -663,20 +663,21 @@ class GClient(object): |
| name = solution["name"] |
| deps_file = solution.get("deps_file", self._options.deps_file) |
| if '/' in deps_file or '\\' in deps_file: |
| - raise Error("deps_file name must not be a path, just a filename.") |
| + raise gclient_utils.Error('deps_file name must not be a path, just a ' |
| + 'filename.') |
| if name in entries: |
| - raise Error("solution %s specified more than once" % name) |
| + 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, file.strip()) for file in file_list] |
| + file_list = [os.path.join(name, f.strip()) for f in file_list] |
| self._options.revision = None |
| try: |
| - deps_content = FileRead(os.path.join(self._root_dir, name, |
| - deps_file)) |
| + deps_content = gclient_utils.FileRead( |
| + os.path.join(self._root_dir, name, deps_file)) |
| except IOError, e: |
| if e.errno != errno.ENOENT: |
| raise |
| @@ -703,12 +704,11 @@ class GClient(object): |
| # Second pass for inherited deps (via the From keyword) |
| for d in deps_to_process: |
| if type(deps[d]) != str: |
| - sub_deps = self._ParseSolutionDeps( |
| - deps[d].module_name, |
| - FileRead(os.path.join(self._root_dir, |
| - deps[d].module_name, |
| - self._options.deps_file)), |
| - {}) |
| + 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, {}) |
| url = sub_deps[d] |
| entries[d] = url |
| if run_scm: |
| @@ -789,19 +789,19 @@ class GClient(object): |
| revision_overrides = {} |
| for revision in self._options.revisions: |
| if revision.find("@") < 0: |
| - raise Error( |
| + raise gclient_utils.Error( |
| "Specify the full dependency when specifying a revision number.") |
| revision_elem = revision.split("@") |
| # Disallow conflicting revs |
| if revision_overrides.has_key(revision_elem[0]) and \ |
| revision_overrides[revision_elem[0]] != revision_elem[1]: |
| - raise Error( |
| + raise gclient_utils.Error( |
| "Conflicting revision numbers specified.") |
| revision_overrides[revision_elem[0]] = revision_elem[1] |
| solutions = self.GetVar("solutions") |
| if not solutions: |
| - raise Error("No solution specified") |
| + raise gclient_utils.Error("No solution specified") |
| entries = {} |
| entries_deps_content = {} |
| @@ -826,7 +826,7 @@ class GClient(object): |
| for solution in solutions: |
| name = solution["name"] |
| if name in entries: |
| - raise Error("solution %s specified more than once" % name) |
| + raise gclient_utils.Error("solution %s specified more than once" % name) |
| (url, rev) = GetURLAndRev(name, solution["url"]) |
| entries[name] = "%s@%s" % (url, rev) |
| # TODO(aharper): SVN/SCMWrapper cleanup (non-local commandset) |
| @@ -854,21 +854,12 @@ class GClient(object): |
| if type(deps[d]) != str: |
| deps_parent_url = entries[deps[d].module_name] |
| if deps_parent_url.find("@") < 0: |
| - raise Error("From %s missing revisioned url" % deps[d].module_name) |
| - deps_parent_url_components = deps_parent_url.split("@") |
| - # TODO(aharper): SVN/SCMWrapper cleanup (non-local commandset) |
| - deps_parent_content = gclient_scm.CaptureSVN( |
| - ["cat", |
| - "%s/%s@%s" % (deps_parent_url_components[0], |
| - self._options.deps_file, |
| - deps_parent_url_components[1])], |
| - os.getcwd()) |
| - sub_deps = self._ParseSolutionDeps( |
| - deps[d].module_name, |
| - FileRead(os.path.join(self._root_dir, |
| - deps[d].module_name, |
| - self._options.deps_file)), |
| - {}) |
| + raise gclient_utils.Error("From %s missing revisioned url" % |
| + deps[d].module_name) |
| + content = gclient_utils.FileRead(os.path.join(self._root_dir, |
| + deps[d].module_name, |
|
Dirk Pranke
2009/11/10 19:49:24
You're sure this file will already be local? (I'm
M-A Ruel
2009/11/10 20:02:23
If you look at the old code, it was running [svn c
|
| + self._options.deps_file)) |
| + sub_deps = self._ParseSolutionDeps(deps[d].module_name, content, {}) |
| (url, rev) = GetURLAndRev(d, sub_deps[d]) |
| entries[d] = "%s@%s" % (url, rev) |
| print(";\n\n".join(["%s: %s" % (x, entries[x]) |
| @@ -886,7 +877,7 @@ def DoCleanup(options, args): |
| """ |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| 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. |
| @@ -906,10 +897,11 @@ def DoConfig(options, args): |
| Error: on usage error |
| """ |
| if len(args) < 1 and not options.spec: |
| - raise Error("required argument missing; see 'gclient help config'") |
| + raise gclient_utils.Error("required argument missing; see 'gclient help " |
| + "config'") |
| if os.path.exists(options.config_filename): |
| - raise Error("%s file already exists in the current directory" % |
| - options.config_filename) |
| + raise gclient_utils.Error("%s file already exists in the current directory" |
| + % options.config_filename) |
| client = GClient('.', options) |
| if options.spec: |
| client.SetConfig(options.spec) |
| @@ -932,11 +924,11 @@ def DoExport(options, args): |
| Error: on usage error |
| """ |
| if len(args) != 1: |
| - raise Error("Need directory name") |
| + raise gclient_utils.Error("Need directory name") |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| if options.verbose: |
| # Print out the .gclient file. This is longer than if we just printed the |
| @@ -950,10 +942,12 @@ def DoHelp(options, args): |
| Raises: |
| Error: if the command is unknown. |
| """ |
| + __pychecker__ = 'unusednames=options' |
| if len(args) == 1 and args[0] in COMMAND_USAGE_TEXT: |
| print(COMMAND_USAGE_TEXT[args[0]]) |
| else: |
| - raise Error("unknown subcommand '%s'; see 'gclient help'" % args[0]) |
| + raise gclient_utils.Error("unknown subcommand '%s'; see 'gclient help'" % |
| + args[0]) |
| def DoPack(options, args): |
| @@ -964,7 +958,7 @@ def DoPack(options, args): |
| """ |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| 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. |
| @@ -980,7 +974,7 @@ def DoStatus(options, args): |
| """ |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| 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. |
| @@ -997,7 +991,7 @@ def DoUpdate(options, args): |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| if not options.head: |
| solutions = client.GetVar('solutions') |
| @@ -1034,7 +1028,7 @@ def DoDiff(options, args): |
| """ |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| 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. |
| @@ -1050,7 +1044,7 @@ def DoRevert(options, args): |
| """ |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| return client.RunOnDeps('revert', args) |
| @@ -1062,7 +1056,7 @@ def DoRunHooks(options, args): |
| """ |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| 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. |
| @@ -1077,9 +1071,10 @@ def DoRevInfo(options, args): |
| Raises: |
| Error: if client isn't configured properly. |
| """ |
| + __pychecker__ = 'unusednames=args' |
| client = GClient.LoadCurrentConfig(options) |
| if not client: |
| - raise Error("client not configured; see 'gclient config'") |
| + raise gclient_utils.Error("client not configured; see 'gclient config'") |
| client.PrintRevInfo() |
| @@ -1107,7 +1102,8 @@ def DispatchCommand(command, options, args, command_map=None): |
| if command in command_map: |
| return command_map[command](options, args) |
| else: |
| - raise Error("unknown subcommand '%s'; see 'gclient help'" % command) |
| + raise gclient_utils.Error("unknown subcommand '%s'; see 'gclient help'" % |
| + command) |
| def Main(argv): |
| @@ -1185,7 +1181,7 @@ def Main(argv): |
| if "__main__" == __name__: |
| try: |
| result = Main(sys.argv) |
| - except Error, e: |
| + except gclient_utils.Error, e: |
| print >> sys.stderr, "Error: %s" % str(e) |
| result = 1 |
| sys.exit(result) |