diff --git a/pagure/__init__.py b/pagure/__init__.py index 8eed220..695aec8 100644 --- a/pagure/__init__.py +++ b/pagure/__init__.py @@ -314,13 +314,28 @@ def __get_file_in_tree(repo_obj, tree, filepath): ''' Retrieve the entry corresponding to the provided filename in a given tree. ''' + filename = filepath[0] if isinstance(tree, pygit2.Blob): return for entry in tree: if entry.name == filename: if len(filepath) == 1: - return repo_obj[entry.oid] + blob = repo_obj[entry.oid] + content = blob.data + # If it's a (sane) symlink, we try a single-level dereference + if entry.filemode == pygit2.GIT_FILEMODE_LINK \ + and os.path.normpath(content) == content \ + and not os.path.isabs(content): + try: + dereferenced = tree[content] + except KeyError: + pass + else: + if dereferenced.filemode == pygit2.GIT_FILEMODE_BLOB: + blob = repo_obj[dereferenced.oid] + + return blob else: return __get_file_in_tree( repo_obj, repo_obj[entry.oid], filepath[1:]) diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 50ff49b..4efb6db 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -88,18 +88,9 @@ def view_repo(repo, username=None): for i in tree: name, ext = os.path.splitext(i.name) if name == 'README': - content = repo_obj[i.oid].data - # If it's a (sane) symlink, we try a single-level dereference - if i.filemode == pygit2.GIT_FILEMODE_LINK \ - and os.path.normpath(content) == content \ - and not os.path.isabs(content): - try: - dereferenced = last_commits[0].tree[content] - except KeyError: - pass - else: - if dereferenced.filemode == pygit2.GIT_FILEMODE_BLOB: - content = repo_obj[dereferenced.oid].data + content = __get_file_in_tree( + repo_obj, last_commits[0].tree, [i.name]).data + readme, safe = pagure.doc_utils.convert_readme( content, ext, view_file_url=flask.url_for(