Rev 2014: Fix find_all for funny branch locations. in file:///data/jelmer/bzr-svn/0.5/

Jelmer Vernooij jelmer at samba.org
Tue Nov 18 04:05:41 GMT 2008


At file:///data/jelmer/bzr-svn/0.5/

------------------------------------------------------------
revno: 2014
revision-id: jelmer at samba.org-20081118040540-5pdtp6qrajmfuhph
parent: jelmer at samba.org-20081118033934-lzw2d6e1marwaceg
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.5
timestamp: Tue 2008-11-18 05:05:40 +0100
message:
  Fix find_all for funny branch locations.
modified:
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
=== modified file 'fetch.py'
--- a/fetch.py	2008-11-18 03:39:34 +0000
+++ b/fetch.py	2008-11-18 04:05:40 +0000
@@ -669,20 +669,23 @@
         yet in the target repository.
         """
         meta_map = {}
-        graph = self.source.get_graph()
-        available_revs = set()
+        needed = []
         for revmeta in self.source._revmeta_provider.iter_all_changes(self.source.get_layout(), mapping=mapping, from_revnum=self.source.get_latest_revnum(), pb=pb):
             if revmeta.is_hidden(mapping):
                 continue
-            revid = revmeta.get_revision_id(mapping)
-            available_revs.add(revid)
-            meta_map[revid] = revmeta
-        if target_is_empty:
-            missing = available_revs
-        else:
-            missing = available_revs.difference(self.target.has_revisions(available_revs))
-        needed = list(graph.iter_topo_order(missing))
-        return [(meta_map[revid], mapping) for revid in needed]
+            if target_is_empty or not self.target.has_revision(revmeta.get_revision_id(mapping)):
+                needed.append((revmeta, mapping))
+        # Check all parents are present
+        ret = list(needed)
+        ret.reverse()
+        for revmeta, mapping in reversed(needed):
+            lhs_parent_revmeta = revmeta.get_lhs_parent_revmeta(mapping)
+            if lhs_parent_revmeta is None:
+                continue
+            if not (lhs_parent_revmeta, mapping) in needed:
+                ret = self._find_until(revmeta.get_foreign_revid(), mapping) + ret
+
+        return ret
 
     def _find_until(self, foreign_revid, mapping, find_ghosts=False, pb=None,
                     checked=None, project=None, target_is_empty=False):




More information about the bazaar-commits mailing list