This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8431 in repository https://gitbox.apache.org/repos/asf/allura.git
commit 5334d906c7dccd90946704267f3f081cd0779ee9 Author: Dave Brondsema <[email protected]> AuthorDate: Fri May 20 13:08:09 2022 -0400 [#8431] avoid errors when a directory changes to file (blob) or symlink --- Allura/allura/controllers/repository.py | 4 +++- Allura/allura/model/repository.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py index 933b6f378..ad26a9fc5 100644 --- a/Allura/allura/controllers/repository.py +++ b/Allura/allura/controllers/repository.py @@ -896,9 +896,11 @@ class FileBrowser(BaseController): :return: ''' try: - path, filename = os.path.split(self._blob.path()) a_ci = c.app.repo.commit(prev_commit) a = a_ci.get_path(prev_file or self._blob.path()) + if not isinstance(a, M.repository.Blob): + # could be a Tree (directory) in the previous commit, can't diff that! + raise TypeError() apath = a.path() except Exception: # prev commit doesn't have the file diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py index ddedc1cc3..71878952b 100644 --- a/Allura/allura/model/repository.py +++ b/Allura/allura/model/repository.py @@ -1362,6 +1362,9 @@ class Tree(MappedClass, RepoObject): path = path.split('/') obj = self for p in path: + if isinstance(obj, Blob): # normally is Tree + # can get a Blob (incl git symlink in past) if it changed type in a commit + return None try: obj = obj[p] except KeyError: @@ -1478,7 +1481,6 @@ class Tree(MappedClass, RepoObject): class Blob: - '''Lightweight object representing a file in the repo''' def __init__(self, tree, name, _id):
