Switch to side-by-side view

--- a/Allura/allura/model/repo.py
+++ b/Allura/allura/model/repo.py
@@ -9,7 +9,9 @@
     class __mongometa__:
         name = 'repo_ci'
         session = main_doc_session
-        indexes = ('parent_ids')
+        indexes = [
+            ('parent_ids',),
+            ('child_ids',) ]
     User = dict(name=str, email=str, date=datetime)
 
     _id = Field(str)
@@ -19,6 +21,21 @@
     message = Field(str)
     parent_ids = Field([str])
     child_ids = Field([str])
+
+    def __repr__(self):
+        return '%s %s' % (
+            self._id[:7], self.summary)
+
+    @property
+    def summary(self):
+        if self.message:
+            summary = []
+            for line in self.message.splitlines():
+                line = line.rstrip()
+                if line: summary.append(line)
+                else: return ' '.join(summary)
+            return ' '.join(summary)
+        return ''
 
 class Tree(Document):
     class __mongometa__:
@@ -46,3 +63,25 @@
 
     _id = Field(str)
     differences = Field([dict(name=str, lhs_id=str, rhs_id=str)])
+
+class BasicBlock(Document):
+    class __mongometa__:
+        name = 'repo_basic_block'
+        session = main_doc_session
+        indexes = [
+            ('commit_ids',),
+            ('score') ]
+
+    _id = Field(str)
+    parent_commit_ids = Field([str])
+    commit_ids = Field([str])
+    commit_times = Field([datetime])
+    score = Field(int)
+
+    def __repr__(self):
+        return '%s: (P %s, T %s..%s (%d commits))' % (
+            self._id[:6],
+            [ oid[:6] for oid in self.parent_commit_ids ],
+            self.commit_ids[0][:6],
+            self.commit_ids[-1][:6],
+            len(self.commit_ids))