[Pkg-bazaar-commits] ./bzr-gtk/unstable r22: sort revisions to be grouped by branch

David Allouche david.allouche at canonical.com
Fri Apr 10 07:15:33 UTC 2009


------------------------------------------------------------
revno: 22
committer: David Allouche <david.allouche at canonical.com>
timestamp: Sun 2005-11-27 19:33:31 +0100
message:
  sort revisions to be grouped by branch
modified:
  graph.py
-------------- next part --------------
=== modified file 'graph.py'
--- a/graph.py	2005-11-26 02:16:42 +0000
+++ b/graph.py	2005-11-27 18:33:31 +0000
@@ -144,6 +144,53 @@
             if pending_count == 0:
                 ancestor_ids_of[parent_id] = None
 
+    # Try to compact sequences of revisions on the same branch.
+    distances = {}
+    skipped_revids = []
+    expected_id = sorted_revids[0]
+    pending_ids = []
+    import pdb
+    while True:
+        #pdb.set_trace()
+        try:
+            revid = sorted_revids.pop(0)
+        except:
+            pdb.set_trace()
+        if revid != expected_id:
+            skipped_revids.append(revid)
+            continue
+        revision = revisions[revid]
+        for child in children[revision]:
+            # postpone if any child is missing
+            if child.revision_id not in distances:
+                if expected_id not in pending_ids:
+                    pending_ids.append(expected_id)
+                assert len(pending_ids) > 1
+                expected_id = pending_ids.pop(0)
+                skipped_revids.append(revid)
+                sorted_revids[:0] = skipped_revids
+                skipped_revids = []
+                break
+        else:
+            # all children are here, push!
+            #if len(distances) == 15:
+            #    pdb.set_trace()
+            distances[revid] = len(distances)
+            for parent in parent_ids_of[revision]:
+                if parent not in pending_ids:
+                    pending_ids.insert(0, parent)
+            if not pending_ids:
+                break
+            expected_id = pending_ids.pop(0)
+            # if the next expected has already been skipped, requeue the
+            # expected and its potential ancestors.
+            if expected_id in skipped_revids:
+                pos = skipped_revids.index(expected_id)
+                sorted_revids[:0] = skipped_revids[pos:]
+                del skipped_revids[pos:]
+
+    sorted_revids = sorted(distances, key=distances.get)
+
     return (sorted_revids, revisions, colours, children, parent_ids_of)
 
 def graph(revids, revisions, colours, parent_ids):



More information about the Pkg-bazaar-commits mailing list