| Index: chrome/common/extensions/docs/server2/gitiles_file_system.py
|
| diff --git a/chrome/common/extensions/docs/server2/gitiles_file_system.py b/chrome/common/extensions/docs/server2/gitiles_file_system.py
|
| index 5e2f86784a1b60dee722ef499514f234a2c92121..c38570ba765cec46a94f80c5c17aa3eed1a4f2da 100644
|
| --- a/chrome/common/extensions/docs/server2/gitiles_file_system.py
|
| +++ b/chrome/common/extensions/docs/server2/gitiles_file_system.py
|
| @@ -16,7 +16,7 @@ from file_system import (FileNotFoundError,
|
| FileSystemError,
|
| StatInfo)
|
| from future import All, Future
|
| -from path_util import AssertIsValid, IsDirectory, SplitParent, ToDirectory
|
| +from path_util import AssertIsValid, IsDirectory, ToDirectory
|
| from third_party.json_schema_compiler.memoize import memoize
|
| from url_constants import GITILES_BASE, GITILES_BRANCH_BASE
|
|
|
| @@ -104,9 +104,11 @@ class GitilesFileSystem(FileSystem):
|
| # "name": ".gitignore"
|
| # },
|
| # ...
|
| + # ]
|
| # }
|
| def list_dir(json_data):
|
| - return [e['name'] for e in _ParseGitilesJson(json_data)['entries']]
|
| + entries = _ParseGitilesJson(json_data).get('entries', [])
|
| + return [e['name'] + ('/' if e['type'] == 'tree' else '') for e in entries]
|
|
|
| def fixup_url_format(path):
|
| # By default, Gitiles URLs display resources in HTML. To get resources
|
| @@ -135,8 +137,29 @@ class GitilesFileSystem(FileSystem):
|
| return Future(value=())
|
|
|
| @memoize
|
| - def GetCommitID(self):
|
| - '''Returns a future that resolves to the commit ID for this branch.
|
| + def _GetCommitInfo(self, key):
|
| + '''Gets the commit information specified by |key|.
|
| +
|
| + The JSON view for commit info looks like:
|
| + {
|
| + "commit": "8fd578e1a7b142cd10a4387861f05fb9459b69e2", # Commit ID.
|
| + "tree": "3ade65d8a91eadd009a6c9feea8f87db2c528a53", # Tree ID.
|
| + "parents": [
|
| + "a477c787fe847ae0482329f69b39ce0fde047359" # Previous commit ID.
|
| + ],
|
| + "author": {
|
| + "name": "...",
|
| + "email": "...",
|
| + "time": "Tue Aug 12 17:17:21 2014"
|
| + },
|
| + "committer": {
|
| + "name": "...",
|
| + "email": "...",
|
| + "time": "Tue Aug 12 17:18:28 2014"
|
| + },
|
| + "message": "...",
|
| + "tree_diff": [...]
|
| + }
|
| '''
|
| # Commit information for a branch is obtained by appending '?format=JSON'
|
| # to the branch URL. Note that '<gitiles_url>/<branch>?format=JSON' is
|
| @@ -145,17 +168,12 @@ class GitilesFileSystem(FileSystem):
|
| # commit info JSON content.
|
| fetch_future = self._fetcher.FetchAsync(self._base_url + _JSON_FORMAT)
|
| content_future = self._ResolveFetchContent(self._base_url, fetch_future)
|
| - # The commit info JSON looks like:
|
| - #
|
| - # {
|
| - # "commit": "8fd578e1a7b142cd10a4387861f05fb9459b69e2", # Commit ID.
|
| - # "tree": "3ade65d8a91eadd009a6c9feea8f87db2c528a53", # Tree ID.
|
| - # "author": {...},
|
| - # "committer": {...},
|
| - # "message": <codereview message>,
|
| - # ...
|
| - # }
|
| - return content_future.Then(lambda json: _ParseGitilesJson(json)['commit'])
|
| + return content_future.Then(lambda json: _ParseGitilesJson(json)[key])
|
| +
|
| + def GetCommitID(self):
|
| + '''Returns a future that resolves to the commit ID for this branch.
|
| + '''
|
| + return self._GetCommitInfo('commit')
|
|
|
| def Stat(self, path):
|
| return self.StatAsync(path).Get()
|
| @@ -176,5 +194,10 @@ class GitilesFileSystem(FileSystem):
|
| return self._ResolveFetchContent(path, fetch_future).Then(stat)
|
|
|
| def GetIdentity(self):
|
| - return '@'.join((self.__class__.__name__,
|
| - StringIdentity(self._commit or self._branch)))
|
| + # NOTE: Do not use commit information to create the string identity.
|
| + # Doing so will mess up caching.
|
| + if self._commit is None and self._branch != 'master':
|
| + str_id = GITILES_BRANCH_BASE
|
| + else:
|
| + str_id = GITILES_BASE
|
| + return '@'.join((self.__class__.__name__, StringIdentity(str_id)))
|
|
|