Преглед на файлове

Skip yielding objects until we've figured out the sha's.

Jelmer Vernooij преди 16 години
родител
ревизия
676d7e6468
променени са 1 файла, в които са добавени 4 реда и са изтрити 5 реда
  1. 4 5
      dulwich/repo.py

+ 4 - 5
dulwich/repo.py

@@ -61,7 +61,6 @@ class Repo(object):
     return self._basedir
     return self._basedir
 
 
   def fetch_objects(self, determine_wants, graph_walker, progress):
   def fetch_objects(self, determine_wants, graph_walker, progress):
-    sha_done = set()
     wants = determine_wants(self.heads())
     wants = determine_wants(self.heads())
     commits_to_send = []
     commits_to_send = []
     ref = graph_walker.next()
     ref = graph_walker.next()
@@ -70,12 +69,12 @@ class Repo(object):
         if ref in self.object_store:
         if ref in self.object_store:
             graph_walker.ack(ref)
             graph_walker.ack(ref)
         ref = graph_walker.next()
         ref = graph_walker.next()
+    sha_done = set()
     for sha in commits_to_send:
     for sha in commits_to_send:
         if sha in sha_done:
         if sha in sha_done:
             continue
             continue
 
 
         c = self.commit(sha)
         c = self.commit(sha)
-        yield c
         sha_done.add(sha)
         sha_done.add(sha)
 
 
         def parse_tree(tree, sha_done):
         def parse_tree(tree, sha_done):
@@ -83,22 +82,22 @@ class Repo(object):
                 if not x in sha_done:
                 if not x in sha_done:
                     try:
                     try:
                         t = self.tree(x)
                         t = self.tree(x)
-                        yield t
                         sha_done.add(x)
                         sha_done.add(x)
                         parse_tree(t, sha_done)
                         parse_tree(t, sha_done)
                     except:
                     except:
-                        yield self.get_object(x)
                         sha_done.append(x)
                         sha_done.append(x)
 
 
         treesha = c.tree
         treesha = c.tree
         if treesha not in sha_done:
         if treesha not in sha_done:
             t = self.tree(treesha)
             t = self.tree(treesha)
-            yield t
             sha_done.add(treesha)
             sha_done.add(treesha)
             parse_tree(t, sha_done)
             parse_tree(t, sha_done)
 
 
         progress("counting objects: %d\r" % len(sha_done))
         progress("counting objects: %d\r" % len(sha_done))
 
 
+        for sha in sha_done:
+            yield self.get_object(sha)
+
   def object_dir(self):
   def object_dir(self):
     return os.path.join(self.basedir(), OBJECTDIR)
     return os.path.join(self.basedir(), OBJECTDIR)