--- a/Allura/allura/tests/unit/test_repo.py
+++ b/Allura/allura/tests/unit/test_repo.py
@@ -1,6 +1,8 @@
+import datetime
import unittest
from allura import model as M
+from allura.controllers.repository import topo_sort
from alluratest.controller import setup_unit_test
class TestCommitRunBuilder(unittest.TestCase):
@@ -48,3 +50,34 @@
crb.run()
crb.cleanup()
self.assertEqual(M.repo.CommitRunDoc.m.count(), 1)
+
+class TestTopoSort(unittest.TestCase):
+ def test_commit_dates_out_of_order(self):
+ """Commits should be sorted by their parent/child relationships,
+ regardless of the date on the commit.
+ """
+ head_ids = ['dev', 'master']
+ parents = {
+ 'dev': ['dev@{1}'],
+ 'dev@{1}': ['master'],
+ 'master': ['master@{1}'],
+ 'master@{1}': ['master@{2}'],
+ 'master@{2}': ['master@{3}'],
+ 'master@{3}': []}
+ children = {
+ 'master@{3}': ['master@{2}'],
+ 'master@{2}': ['master@{1}'],
+ 'master@{1}': ['master'],
+ 'master': ['dev@{1}'],
+ 'dev@{1}': ['dev'],
+ 'dev': []}
+ dates = {
+ 'dev@{1}': datetime.datetime(2012, 1, 1),
+ 'master@{3}': datetime.datetime(2012, 2, 1),
+ 'master@{2}': datetime.datetime(2012, 3, 1),
+ 'master@{1}': datetime.datetime(2012, 4, 1),
+ 'master': datetime.datetime(2012, 5, 1),
+ 'dev': datetime.datetime(2012, 6, 1)}
+ result = topo_sort(children, parents, dates, head_ids)
+ self.assertEqual(list(result), ['dev', 'dev@{1}', 'master',
+ 'master@{1}', 'master@{2}', 'master@{3}'])