| Index: chrome/common/extensions/docs/server2/subversion_file_system.py
|
| diff --git a/chrome/common/extensions/docs/server2/subversion_file_system.py b/chrome/common/extensions/docs/server2/subversion_file_system.py
|
| index 41b4d2fa7c043e96660ca72865f88cd7236ff36d..d35a16db6d29b0c4dddde0008c2437906c67c878 100644
|
| --- a/chrome/common/extensions/docs/server2/subversion_file_system.py
|
| +++ b/chrome/common/extensions/docs/server2/subversion_file_system.py
|
| @@ -16,9 +16,11 @@ import svn_constants
|
| import url_constants
|
|
|
| class _AsyncFetchFuture(object):
|
| - def __init__(self, paths, fetcher, binary):
|
| + def __init__(self, paths, fetcher, binary, args=None):
|
| + def apply_args(path):
|
| + return path if args is None else '%s?%s' % (path, args)
|
| # A list of tuples of the form (path, Future).
|
| - self._fetches = [(path, fetcher.FetchAsync(path))
|
| + self._fetches = [(path, fetcher.FetchAsync(apply_args(path)))
|
| for path in paths]
|
| self._value = {}
|
| self._error = None
|
| @@ -54,7 +56,7 @@ class SubversionFileSystem(FileSystem):
|
| '''Class to fetch resources from src.chromium.org.
|
| '''
|
| @staticmethod
|
| - def Create(branch):
|
| + def Create(branch, revision=None):
|
| if branch == 'trunk':
|
| svn_path = 'trunk/src/%s' % svn_constants.EXTENSIONS_PATH
|
| else:
|
| @@ -63,17 +65,24 @@ class SubversionFileSystem(FileSystem):
|
| return SubversionFileSystem(
|
| AppEngineUrlFetcher('%s/%s' % (url_constants.SVN_URL, svn_path)),
|
| AppEngineUrlFetcher('%s/%s' % (url_constants.VIEWVC_URL, svn_path)),
|
| - svn_path)
|
| + svn_path,
|
| + revision=revision)
|
|
|
| - def __init__(self, file_fetcher, stat_fetcher, svn_path):
|
| + def __init__(self, file_fetcher, stat_fetcher, svn_path, revision=None):
|
| self._file_fetcher = file_fetcher
|
| self._stat_fetcher = stat_fetcher
|
| self._svn_path = svn_path
|
| + self._revision = revision
|
|
|
| def Read(self, paths, binary=False):
|
| + args = None
|
| + if self._revision is not None:
|
| + # |fetcher| gets from svn.chromium.org which uses p= for version.
|
| + args = 'p=%s' % self._revision
|
| return Future(delegate=_AsyncFetchFuture(paths,
|
| self._file_fetcher,
|
| - binary))
|
| + binary,
|
| + args=args))
|
|
|
| def _ParseHTML(self, html):
|
| '''Unfortunately, the viewvc page has a stray </div> tag, so this takes care
|
| @@ -142,6 +151,9 @@ class SubversionFileSystem(FileSystem):
|
| def Stat(self, path):
|
| directory, filename = posixpath.split(path)
|
| directory += '/'
|
| + if self._revision is not None:
|
| + # |stat_fetch| uses viewvc which uses pathrev= for version.
|
| + directory += '?pathrev=%s' % self._revision
|
| result = self._stat_fetcher.Fetch(directory)
|
| if result.status_code == 404:
|
| raise FileNotFoundError(
|
| @@ -154,4 +166,6 @@ class SubversionFileSystem(FileSystem):
|
| return StatInfo(stat_info.child_versions[filename])
|
|
|
| def GetIdentity(self):
|
| + # NOTE: no revision here, consider it just an implementation detail of the
|
| + # file version that is handled by Stat.
|
| return '@'.join((self.__class__.__name__, StringIdentity(self._svn_path)))
|
|
|