| Index: chrome/common/extensions/docs/server2/host_file_system_provider.py
|
| diff --git a/chrome/common/extensions/docs/server2/host_file_system_creator.py b/chrome/common/extensions/docs/server2/host_file_system_provider.py
|
| similarity index 64%
|
| rename from chrome/common/extensions/docs/server2/host_file_system_creator.py
|
| rename to chrome/common/extensions/docs/server2/host_file_system_provider.py
|
| index cf741058ca9b6bec371bd768c076d0f655fb7902..a205e2ab63dd72abfbc44c77435f4f2e54ce9be2 100644
|
| --- a/chrome/common/extensions/docs/server2/host_file_system_creator.py
|
| +++ b/chrome/common/extensions/docs/server2/host_file_system_provider.py
|
| @@ -6,14 +6,19 @@ from caching_file_system import CachingFileSystem
|
| from local_file_system import LocalFileSystem
|
| from offline_file_system import OfflineFileSystem
|
| from subversion_file_system import SubversionFileSystem
|
| +from third_party.json_schema_compiler.memoize import memoize
|
|
|
| -class HostFileSystemCreator(object):
|
| +# TODO(kalman): Rename this HostFileSystemProvider.
|
| +
|
| +class HostFileSystemProvider(object):
|
| '''Creates host file systems with configuration information. By default, SVN
|
| file systems are created, although a constructor method can be passed in to
|
| override this behavior (likely for testing purposes).
|
| '''
|
| def __init__(self,
|
| object_store_creator,
|
| + revision_for_trunk=None,
|
| + trunk=None,
|
| offline=False,
|
| constructor_for_test=None):
|
| self._object_store_creator = object_store_creator
|
| @@ -22,19 +27,39 @@ class HostFileSystemCreator(object):
|
| self._offline = offline
|
| # Provides custom create behavior, useful in tests.
|
| self._constructor_for_test = constructor_for_test
|
| + # Common case is for trunk to be derived from the 'trunk' branch, but we
|
| + # need to allow overriding that for cases like pinning trunk to a specific
|
| + # revision and patched file systems.
|
| + if trunk is not None:
|
| + assert revision_for_trunk is None, \
|
| + 'Cannot specify both revision_for_trunk= and trunk='
|
| + self._trunk = trunk
|
| + else:
|
| + self._trunk = self._Create('trunk', revision=revision_for_trunk)
|
|
|
| - def Create(self, branch='trunk', revision=None, offline=None):
|
| + @memoize
|
| + def GetTrunk(self, revision=None):
|
| + return (self._trunk if revision is None else
|
| + self._Create('trunk', revision=revision))
|
| +
|
| + @memoize
|
| + def GetBranch(self, branch):
|
| '''Creates either SVN file systems or specialized file systems from the
|
| constructor passed into this instance. Wraps the resulting file system in
|
| an Offline file system if the offline flag is set, and finally wraps it in a
|
| Caching file system.
|
| '''
|
| + assert isinstance(branch, basestring), 'Branch %s must be a string' % branch
|
| + assert branch != 'trunk', 'Cannot specify branch=\'trunk\', use GetTrunk()'
|
| + return self._Create(branch)
|
| +
|
| + def _Create(self, branch, revision=None):
|
| if self._constructor_for_test is not None:
|
| file_system = self._constructor_for_test(branch=branch, revision=revision)
|
| else:
|
| file_system = SubversionFileSystem.Create(branch=branch,
|
| revision=revision)
|
| - if offline or (offline is None and self._offline):
|
| + if self._offline:
|
| file_system = OfflineFileSystem(file_system)
|
| return CachingFileSystem(file_system, self._object_store_creator)
|
|
|
| @@ -42,16 +67,16 @@ class HostFileSystemCreator(object):
|
| def ForLocal(object_store_creator):
|
| '''Used in creating a server instance on localhost.
|
| '''
|
| - return HostFileSystemCreator(
|
| + return HostFileSystemProvider(
|
| object_store_creator,
|
| constructor_for_test=lambda **_: LocalFileSystem.Create())
|
|
|
| @staticmethod
|
| def ForTest(file_system, object_store_creator):
|
| - '''Used in creating a test server instance. The HostFileSystemCreator
|
| + '''Used in creating a test server instance. The HostFileSystemProvider
|
| returned here will always return |file_system| when its Create() method is
|
| called.
|
| '''
|
| - return HostFileSystemCreator(
|
| + return HostFileSystemProvider(
|
| object_store_creator,
|
| constructor_for_test=lambda **_: file_system)
|
|
|