| Index: gclient_scm.py
|
| diff --git a/gclient_scm.py b/gclient_scm.py
|
| index 43eaca772c3a9433d15a5e9e3d1504ce9a1cd175..148855c89ffc597d645314df55274da19909f303 100644
|
| --- a/gclient_scm.py
|
| +++ b/gclient_scm.py
|
| @@ -27,31 +27,23 @@ SVN_COMMAND = "svn"
|
| ### SCM abstraction layer
|
|
|
|
|
| -# Factory Method for SCM wrapper creation
|
| -
|
| -def create_scm(url, root_dir, relpath, scm_name='svn'):
|
| - # TODO(maruel): Deduce the SCM from the url.
|
| - scm_map = {
|
| - 'svn' : SVNWrapper,
|
| - }
|
| - if not scm_name in scm_map:
|
| - raise gclient_utils.Error('Unsupported scm %s' % scm_name)
|
| - return scm_map[scm_name](url, root_dir, relpath, scm_name)
|
| -
|
| -
|
| -# SCMWrapper base class
|
| -
|
| class SCMWrapper(object):
|
| """Add necessary glue between all the supported SCM.
|
|
|
| This is the abstraction layer to bind to different SCM. Since currently only
|
| subversion is supported, a lot of subersionism remains. This can be sorted out
|
| once another SCM is supported."""
|
| - def __init__(self, url, root_dir, relpath, scm_name='svn'):
|
| + def __init__(self, url=None, root_dir=None, relpath=None,
|
| + scm_name='svn'):
|
| + # TODO(maruel): Deduce the SCM from the url.
|
| self.scm_name = scm_name
|
| self.url = url
|
| - self._root_dir = root_dir.replace('/', os.sep)
|
| - self.relpath = relpath.replace('/', os.sep)
|
| + self._root_dir = root_dir
|
| + if self._root_dir:
|
| + self._root_dir = self._root_dir.replace('/', os.sep)
|
| + self.relpath = relpath
|
| + if self.relpath:
|
| + self.relpath = self.relpath.replace('/', os.sep)
|
|
|
| def FullUrlForRelativeUrl(self, url):
|
| # Find the forth '/' and strip from there. A bit hackish.
|
| @@ -62,21 +54,21 @@ class SCMWrapper(object):
|
| if file_list is None:
|
| file_list = []
|
|
|
| - commands = ['cleanup', 'export', 'update', 'revert',
|
| - 'status', 'diff', 'pack', 'runhooks']
|
| + commands = {
|
| + 'cleanup': self.cleanup,
|
| + 'export': self.export,
|
| + 'update': self.update,
|
| + 'revert': self.revert,
|
| + 'status': self.status,
|
| + 'diff': self.diff,
|
| + 'pack': self.pack,
|
| + 'runhooks': self.status,
|
| + }
|
|
|
| if not command in commands:
|
| raise gclient_utils.Error('Unknown command %s' % command)
|
|
|
| - if not command in dir(self):
|
| - raise gclient_utils.Error('Command %s not implemnted in %s wrapper' % (
|
| - command, self.scm_name))
|
| -
|
| - return getattr(self, command)(options, args, file_list)
|
| -
|
| -
|
| -class SVNWrapper(SCMWrapper):
|
| - """ Wrapper for SVN """
|
| + return commands[command](options, args, file_list)
|
|
|
| def cleanup(self, options, args, file_list):
|
| """Cleanup working copy."""
|
| @@ -266,9 +258,6 @@ class SVNWrapper(SCMWrapper):
|
| RunSVN(command + accumulated_paths,
|
| os.path.join(self._root_dir, self.relpath))
|
|
|
| - def runhooks(self, options, args, file_list):
|
| - self.status(options, args, file_list)
|
| -
|
| def status(self, options, args, file_list):
|
| """Display status information."""
|
| path = os.path.join(self._root_dir, self.relpath)
|
|
|