--- a/Allura/allura/model/repo.py
+++ b/Allura/allura/model/repo.py
@@ -65,6 +65,7 @@
'repo_last_commit', project_doc_session,
Field('_id', str),
Field('object_id', str, index=True),
+ Field('name', str),
Field('commit_info', dict(
id=str,
date=datetime,
@@ -331,15 +332,22 @@
def ls(self):
# Load last commit info
+ id_re = re.compile("^{0}:{1}:".format(self.repo._id, self.path()))
+ lc_index = dict(
+ (lc.name, lc.commit_info)
+ for lc in LastCommitDoc.m.find(dict(_id=id_re)))
+
+ # FIXME: Temporarily fall back to old, semi-broken lookup behavior until refresh is done
oids = [ x.id for x in chain(self.tree_ids, self.blob_ids, self.other_ids) ]
- lc_index = dict(
+ id_re = re.compile("^{0}:".format(self.repo._id))
+ lc_index.update(dict(
(lc.object_id, lc.commit_info)
- for lc in LastCommitDoc.m.find(dict(
- _id=re.compile("^{}:".format(self.repo._id)),
- object_id={'$in': oids})))
+ for lc in LastCommitDoc.m.find(dict(_id=id_re, object_id={'$in': oids}))))
+ # /FIXME
+
results = []
- def _get_last_commit(oid):
- lc = lc_index.get(oid)
+ def _get_last_commit(name, oid):
+ lc = lc_index.get(name, lc_index.get(oid, None))
if lc is None:
lc = dict(
author=None,
@@ -358,19 +366,19 @@
kind='DIR',
name=x.name,
href=x.name + '/',
- last_commit=_get_last_commit(x.id)))
+ last_commit=_get_last_commit(x.name, x.id)))
for x in sorted(self.blob_ids, key=lambda x:x.name):
results.append(dict(
kind='FILE',
name=x.name,
href=x.name,
- last_commit=_get_last_commit(x.id)))
+ last_commit=_get_last_commit(x.name, x.id)))
for x in sorted(self.other_ids, key=lambda x:x.name):
results.append(dict(
kind=x.type,
name=x.name,
href=None,
- last_commit=_get_last_commit(x.id)))
+ last_commit=_get_last_commit(x.name, x.id)))
return results
def path(self):