summary: Avoid to re-fetch Node object

This commit is contained in:
Johannes Bornhold 2016-09-08 13:05:55 +02:00
parent 55b3018fc2
commit c5898bf7ee
3 changed files with 26 additions and 24 deletions

View file

@ -63,14 +63,16 @@ class SummaryController(BaseRepoController):
@cache_region('long_term')
def _generate_readme(cache_key):
readme_data = None
readme_file = None
readme_node = None
readme_filename = None
commit = self._get_landing_commit_or_none(db_repo)
if commit:
log.debug("Searching for a README file.")
readme_file = ReadmeFinder(default_renderer).search(commit)
if readme_file:
readme_data = self._render_readme_or_none(commit, readme_file)
return readme_data, readme_file
readme_node = ReadmeFinder(default_renderer).search(commit)
if readme_node:
readme_data = self._render_readme_or_none(commit, readme_node)
readme_filename = readme_node.path
return readme_data, readme_filename
invalidator_context = CacheKey.repo_context_cache(
_generate_readme, repo_name, CacheKey.CACHE_TYPE_README)
@ -93,13 +95,13 @@ class SummaryController(BaseRepoController):
log.exception(
"Problem getting commit when trying to render the README.")
def _render_readme_or_none(self, commit, readme_file):
def _render_readme_or_none(self, commit, readme_node):
log.debug(
'Found README file `%s` rendering...', readme_file)
'Found README file `%s` rendering...', readme_node.path)
renderer = MarkupRenderer()
node = commit.get_node(readme_file)
try:
return renderer.render(node.content, filename=readme_file)
return renderer.render(
readme_node.content, filename=readme_node.file)
except Exception:
log.exception(
"Exception while trying to render the README")

View file

@ -987,7 +987,7 @@ class ReadmeFinder:
matches = self._match_readmes(nodes)
matches = self._sort_according_to_priority(matches)
if matches:
return matches[0].path
return matches[0]
paths = self._match_paths(nodes)
paths = self._sort_paths_according_to_priority(paths)

View file

@ -54,29 +54,29 @@ class CommitUtility:
def test_no_matching_file_returns_none(commit_util):
commit = commit_util.commit_with_files(['LIESMICH'])
finder = ReadmeFinder(default_renderer='rst')
filename = finder.search(commit)
assert filename is None
filenode = finder.search(commit)
assert filenode is None
def test_matching_file_returns_the_file_name(commit_util):
commit = commit_util.commit_with_files(['README'])
finder = ReadmeFinder(default_renderer='rst')
filename = finder.search(commit)
assert filename == 'README'
filenode = finder.search(commit)
assert filenode.path == 'README'
def test_matching_file_with_extension(commit_util):
commit = commit_util.commit_with_files(['README.rst'])
finder = ReadmeFinder(default_renderer='rst')
filename = finder.search(commit)
assert filename == 'README.rst'
filenode = finder.search(commit)
assert filenode.path == 'README.rst'
def test_prefers_readme_without_extension(commit_util):
commit = commit_util.commit_with_files(['README.rst', 'Readme'])
finder = ReadmeFinder()
filename = finder.search(commit)
assert filename == 'Readme'
filenode = finder.search(commit)
assert filenode.path == 'Readme'
@pytest.mark.parametrize('renderer, expected', [
@ -87,20 +87,20 @@ def test_prefers_renderer_extensions(commit_util, renderer, expected):
commit = commit_util.commit_with_files(
['readme.rst', 'readme.md', 'readme.txt'])
finder = ReadmeFinder(default_renderer=renderer)
filename = finder.search(commit)
assert filename == expected
filenode = finder.search(commit)
assert filenode.path == expected
def test_finds_readme_in_subdirectory(commit_util):
commit = commit_util.commit_with_files(['doc/README.rst', 'LIESMICH'])
finder = ReadmeFinder()
filename = finder.search(commit)
assert filename == 'doc/README.rst'
filenode = finder.search(commit)
assert filenode.path == 'doc/README.rst'
def test_prefers_subdirectory_with_priority(commit_util):
commit = commit_util.commit_with_files(
['Doc/Readme.rst', 'Docs/Readme.rst'])
finder = ReadmeFinder()
filename = finder.search(commit)
assert filename == 'Doc/Readme.rst'
filenode = finder.search(commit)
assert filenode.path == 'Doc/Readme.rst'