From 9a66ddfcf8edfd5697429b50668633eaec11c342 Mon Sep 17 00:00:00 2001 From: "maruel@chromium.org" Date: Wed, 16 Jun 2010 16:54:16 +0000 Subject: [PATCH] Move these functions to Dependency to simplify the diff later. No code change. _ParseSolutionDeps(), _ParseAllDeps(), _RunHookAction(), _RunHooks() Review URL: http://codereview.chromium.org/2828009 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@49960 0039d316-1c4b-4281-b951-d872f2087c98 --- gclient.py | 272 ++++++++++++++++++++++++++--------------------------- 1 file changed, 136 insertions(+), 136 deletions(-) diff --git a/gclient.py b/gclient.py index a50935daa..0cc99da2d 100644 --- a/gclient.py +++ b/gclient.py @@ -179,142 +179,6 @@ class Dependency(GClientKeywords): raise gclient_utils.Error('deps_file name must not be a path, just a ' 'filename. %s' % self.deps_file) - -class GClient(Dependency): - """Main gclient checkout root where .gclient resides.""" - SUPPORTED_COMMANDS = [ - 'cleanup', 'diff', 'export', 'pack', 'revert', 'status', 'update', - 'runhooks' - ] - - DEPS_OS_CHOICES = { - "win32": "win", - "win": "win", - "cygwin": "win", - "darwin": "mac", - "mac": "mac", - "unix": "unix", - "linux": "unix", - "linux2": "unix", - } - - DEFAULT_CLIENT_FILE_TEXT = ("""\ -solutions = [ - { "name" : "%(solution_name)s", - "url" : "%(solution_url)s", - "custom_deps" : { - }, - "safesync_url": "%(safesync_url)s" - }, -] -""") - - DEFAULT_SNAPSHOT_SOLUTION_TEXT = ("""\ - { "name" : "%(solution_name)s", - "url" : "%(solution_url)s", - "custom_deps" : { - %(solution_deps)s, - }, - "safesync_url": "%(safesync_url)s" - }, -""") - - DEFAULT_SNAPSHOT_FILE_TEXT = ("""\ -# Snapshot generated with gclient revinfo --snapshot -solutions = [ -%(solution_list)s -] -""") - - def __init__(self, root_dir, options): - Dependency.__init__(self, None, None, None) - self._root_dir = root_dir - self._options = options - self.config_content = None - - def SetConfig(self, content): - assert self.dependencies == [] - config_dict = {} - self.config_content = content - try: - exec(content, config_dict) - except SyntaxError, e: - try: - # Try to construct a human readable error message - error_message = [ - 'There is a syntax error in your configuration file.', - 'Line #%s, character %s:' % (e.lineno, e.offset), - '"%s"' % re.sub(r'[\r\n]*$', '', e.text) ] - except: - # Something went wrong, re-raise the original exception - raise e - else: - # Raise a new exception with the human readable message: - raise gclient_utils.Error('\n'.join(error_message)) - for s in config_dict.get('solutions', []): - self.dependencies.append(Dependency( - self, s['name'], s['url'], - s.get('safesync_url', None), - s.get('custom_deps', {}), - s.get('custom_vars', {}))) - # .gclient can have hooks. - self.deps_hooks = config_dict.get('hooks', []) - - def SaveConfig(self): - gclient_utils.FileWrite(os.path.join(self.root_dir(), - self._options.config_filename), - self.config_content) - - @staticmethod - def LoadCurrentConfig(options): - """Searches for and loads a .gclient file relative to the current working - dir. Returns a GClient object.""" - path = gclient_utils.FindGclientRoot(os.getcwd(), options.config_filename) - if not path: - return None - client = GClient(path, options) - client.SetConfig(gclient_utils.FileRead( - os.path.join(path, options.config_filename))) - return client - - def SetDefaultConfig(self, solution_name, solution_url, safesync_url): - self.SetConfig(self.DEFAULT_CLIENT_FILE_TEXT % { - 'solution_name': solution_name, - 'solution_url': solution_url, - 'safesync_url' : safesync_url, - }) - - def _SaveEntries(self, entries): - """Creates a .gclient_entries file to record the list of unique checkouts. - - The .gclient_entries file lives in the same directory as .gclient. - - Args: - entries: A sequence of solution names. - """ - # Sometimes pprint.pformat will use {', sometimes it'll use { ' ... It - # makes testing a bit too fun. - result = pprint.pformat(entries, 2) - if result.startswith('{\''): - result = '{ \'' + result[2:] - text = "entries = \\\n" + result + '\n' - file_path = os.path.join(self.root_dir(), self._options.entries_filename) - gclient_utils.FileWrite(file_path, text) - - def _ReadEntries(self): - """Read the .gclient_entries file for the given client. - - Returns: - A sequence of solution names, which will be empty if there is the - entries file hasn't been created yet. - """ - scope = {} - filename = os.path.join(self.root_dir(), self._options.entries_filename) - if not os.path.exists(filename): - return [] - exec(gclient_utils.FileRead(filename), scope) - return scope['entries'] - def _ParseSolutionDeps(self, solution_name, solution_deps_content, custom_vars, parse_hooks): """Parses the DEPS file for the specified solution. @@ -515,6 +379,142 @@ solutions = [ if matching_file_list: self._RunHookAction(hook_dict, matching_file_list) + +class GClient(Dependency): + """Main gclient checkout root where .gclient resides.""" + SUPPORTED_COMMANDS = [ + 'cleanup', 'diff', 'export', 'pack', 'revert', 'status', 'update', + 'runhooks' + ] + + DEPS_OS_CHOICES = { + "win32": "win", + "win": "win", + "cygwin": "win", + "darwin": "mac", + "mac": "mac", + "unix": "unix", + "linux": "unix", + "linux2": "unix", + } + + DEFAULT_CLIENT_FILE_TEXT = ("""\ +solutions = [ + { "name" : "%(solution_name)s", + "url" : "%(solution_url)s", + "custom_deps" : { + }, + "safesync_url": "%(safesync_url)s" + }, +] +""") + + DEFAULT_SNAPSHOT_SOLUTION_TEXT = ("""\ + { "name" : "%(solution_name)s", + "url" : "%(solution_url)s", + "custom_deps" : { + %(solution_deps)s, + }, + "safesync_url": "%(safesync_url)s" + }, +""") + + DEFAULT_SNAPSHOT_FILE_TEXT = ("""\ +# Snapshot generated with gclient revinfo --snapshot +solutions = [ +%(solution_list)s +] +""") + + def __init__(self, root_dir, options): + Dependency.__init__(self, None, None, None) + self._root_dir = root_dir + self._options = options + self.config_content = None + + def SetConfig(self, content): + assert self.dependencies == [] + config_dict = {} + self.config_content = content + try: + exec(content, config_dict) + except SyntaxError, e: + try: + # Try to construct a human readable error message + error_message = [ + 'There is a syntax error in your configuration file.', + 'Line #%s, character %s:' % (e.lineno, e.offset), + '"%s"' % re.sub(r'[\r\n]*$', '', e.text) ] + except: + # Something went wrong, re-raise the original exception + raise e + else: + # Raise a new exception with the human readable message: + raise gclient_utils.Error('\n'.join(error_message)) + for s in config_dict.get('solutions', []): + self.dependencies.append(Dependency( + self, s['name'], s['url'], + s.get('safesync_url', None), + s.get('custom_deps', {}), + s.get('custom_vars', {}))) + # .gclient can have hooks. + self.deps_hooks = config_dict.get('hooks', []) + + def SaveConfig(self): + gclient_utils.FileWrite(os.path.join(self.root_dir(), + self._options.config_filename), + self.config_content) + + @staticmethod + def LoadCurrentConfig(options): + """Searches for and loads a .gclient file relative to the current working + dir. Returns a GClient object.""" + path = gclient_utils.FindGclientRoot(os.getcwd(), options.config_filename) + if not path: + return None + client = GClient(path, options) + client.SetConfig(gclient_utils.FileRead( + os.path.join(path, options.config_filename))) + return client + + def SetDefaultConfig(self, solution_name, solution_url, safesync_url): + self.SetConfig(self.DEFAULT_CLIENT_FILE_TEXT % { + 'solution_name': solution_name, + 'solution_url': solution_url, + 'safesync_url' : safesync_url, + }) + + def _SaveEntries(self, entries): + """Creates a .gclient_entries file to record the list of unique checkouts. + + The .gclient_entries file lives in the same directory as .gclient. + + Args: + entries: A sequence of solution names. + """ + # Sometimes pprint.pformat will use {', sometimes it'll use { ' ... It + # makes testing a bit too fun. + result = pprint.pformat(entries, 2) + if result.startswith('{\''): + result = '{ \'' + result[2:] + text = "entries = \\\n" + result + '\n' + file_path = os.path.join(self.root_dir(), self._options.entries_filename) + gclient_utils.FileWrite(file_path, text) + + def _ReadEntries(self): + """Read the .gclient_entries file for the given client. + + Returns: + A sequence of solution names, which will be empty if there is the + entries file hasn't been created yet. + """ + scope = {} + filename = os.path.join(self.root_dir(), self._options.entries_filename) + if not os.path.exists(filename): + return [] + exec(gclient_utils.FileRead(filename), scope) + return scope['entries'] + def _EnforceRevisions(self): """Checks for revision overrides.""" revision_overrides = {}