Rev 3534: (bug #243536) tsort.merge_sorted() should work even with a ghost in mainline. in http://bzr.arbash-meinel.com/branches/bzr/jam-integration

John Arbash Meinel john at arbash-meinel.com
Wed Jul 9 14:39:52 BST 2008


At http://bzr.arbash-meinel.com/branches/bzr/jam-integration

------------------------------------------------------------
revno: 3534
revision-id: john at arbash-meinel.com-20080709133648-3b03z59rcalc4rjx
parent: pqm at pqm.ubuntu.com-20080708172503-gl2dtaz3v7fyc2sl
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: jam-integration
timestamp: Wed 2008-07-09 08:36:48 -0500
message:
  (bug #243536) tsort.merge_sorted() should work even with a ghost in mainline.
  
  There is a bit of a discrepency when it comes to ghosts.
  The revision_graph passed to merge_sorted has had ghosts stripped,
  because it cannot handle pointing to nodes that aren't present.
  (Thinks there is a graph cycle.)
  However, the mainline_history includes the ghost.
  For now, work around this by ignoring the ghost in the mainline
  history.
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/tests/test_tsort.py     testtsort.py-20051025073946-27da871c394d5be4
  bzrlib/tsort.py                tsort.py-20051025073946-7808f6aaf7d07208
-------------- next part --------------
=== modified file 'NEWS'
--- a/NEWS	2008-07-04 07:21:29 +0000
+++ b/NEWS	2008-07-09 13:36:48 +0000
@@ -37,6 +37,9 @@
 
   BUGFIXES:
 
+    * ``bzr log --long`` with a ghost in your mainline now handles that
+      ghost properly. (John Arbash Meinel, #243536)
+
     * ``check`` handles the split-up .bzr layout correctly, so no longer
       requires a branch to be present.
       (Daniel Watkins, #64783)

=== modified file 'bzrlib/tests/test_tsort.py'
--- a/bzrlib/tests/test_tsort.py	2008-02-26 23:04:15 +0000
+++ b/bzrlib/tests/test_tsort.py	2008-07-09 13:36:48 +0000
@@ -533,6 +533,19 @@
             mainline_revisions=[None, 'A']
             )
 
+    def test_mainline_revs_with_ghost(self):
+        # We have a mainline, but the end of it is actually a ghost
+        # The graph that is passed to tsort has had ghosts filtered out, but
+        # the mainline history has not.
+        self.assertSortAndIterate(
+            {'B':[],
+             'C':['B']}.items(),
+            'C',
+            [(0, 'C', 0, (2,), False),
+             (1, 'B', 0, (1,), True),
+             ],
+             True, mainline_revisions=['A', 'B', 'C'])
+
     def test_parallel_root_sequence_numbers_increase_with_merges(self):
         """When there are parallel roots, check their revnos."""
         self.assertSortAndIterate(

=== modified file 'bzrlib/tsort.py'
--- a/bzrlib/tsort.py	2008-03-01 09:11:39 +0000
+++ b/bzrlib/tsort.py	2008-07-09 13:36:48 +0000
@@ -351,7 +351,13 @@
             if parent is None:
                 # end of mainline_revisions history
                 continue
-            if self._graph[revision][0] == parent:
+            graph_parent_ids = self._graph[revision]
+            if not graph_parent_ids:
+                # We ran into a ghost, skip over it, this is a workaround for
+                # bug #243536, the _graph has had ghosts stripped, but the
+                # mainline_revisions have not
+                continue
+            if graph_parent_ids[0] == parent:
                 continue
             # remove it from its prior spot
             self._graph[revision].remove(parent)



More information about the bazaar-commits mailing list