Switch to side-by-side view

--- a/Allura/allura/model/repo_refresh.py
+++ b/Allura/allura/model/repo_refresh.py
@@ -157,6 +157,8 @@
             oids = list(oids)
             for run in CommitRunDoc.m.find(dict(commit_ids={'$in': oids})):
                 runs[run._id] = run
+            for run in CommitRunDoc.m.find(dict(parent_commit_ids={'$in': oids})):
+                runs[run._id] = run
         seen_run_ids = set()
         runs = runs.values()
         while runs:
@@ -169,7 +171,19 @@
                 runs.append(run)
 
     def cleanup(self):
-        '''Delete non-maximal runs'''
+        '''Delete non-maximal runs and merge any new runs with existing runs'''
+        runs = dict(
+            (run['commit_ids'][0], run)
+            for run in self._all_runs())
+        for rid, run in runs.items():
+            p_cis = run['parent_commit_ids']
+            if len(p_cis) != 1: continue
+            parent_run = runs.get(p_cis[0], None)
+            if parent_run is None: continue
+            run['commit_ids'] += parent_run['commit_ids']
+            run['parent_commit_ids'] = parent_run['parent_commit_ids']
+            run.m.save()
+            runs[p_cis[0]].m.delete()
         for run1 in self._all_runs():
             for run2 in CommitRunDoc.m.find(dict(
                     commit_ids=run1.commit_ids[0])):