Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10324)

Unified Diff: chrome/common/extensions/docs/server2/gitiles_file_system.py

Issue 498503002: Docserver: Fixes for GitilesFileSystem (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)))

Powered by Google App Engine
This is Rietveld 408576698