[#4955] ticket:181 fixed recursion
diff --git a/Allura/allura/model/repo.py b/Allura/allura/model/repo.py
index 2cbae4b..e07de6e 100644
--- a/Allura/allura/model/repo.py
+++ b/Allura/allura/model/repo.py
@@ -616,7 +616,8 @@
             else:
                 ci_parents[oid] = run.parent_commit_ids
         for oid in run.parent_commit_ids:
-            _visit(oid)
+            if commit_id!=oid:
+                _visit(oid)
 
     def _gen_ids(commit_ids, skip, limit):
         # Traverse the graph in topo order, yielding commit IDs
diff --git a/Allura/allura/model/repo_refresh.py b/Allura/allura/model/repo_refresh.py
index 87e436e..12bf20c 100644
--- a/Allura/allura/model/repo_refresh.py
+++ b/Allura/allura/model/repo_refresh.py
@@ -304,7 +304,12 @@
             for xx in _walk_tree(tree_index[x.id], tree_index):
                 yield xx
 
-    rhs_tree_ids = TreesDoc.m.get(_id=rhs_ci._id).tree_ids
+    treedoc = TreesDoc.m.get(_id=rhs_ci._id)
+    if treedoc:
+        rhs_tree_ids = treedoc.tree_ids
+    else:
+        return tree_cache
+
     if rhs_ci.parent_ids:
         lhs_ci = CommitDoc.m.get(_id=rhs_ci.parent_ids[0])
     else: