Просмотр исходного кода

Fix ext resolving for PackData.iterentries().

Jelmer Vernooij 16 лет назад
Родитель
Сommit
6cd8105522
2 измененных файлов с 9 добавлено и 4 удалено
  1. 8 3
      dulwich/pack.py
  2. 1 1
      dulwich/repo.py

+ 8 - 3
dulwich/pack.py

@@ -401,7 +401,7 @@ class PackData(object):
         offset += total_size
     f.close()
 
-  def iterentries(self):
+  def iterentries(self, ext_resolve_ref=None):
     found = {}
     at = {}
     postponed = defaultdict(list)
@@ -411,6 +411,11 @@ class PackData(object):
     def get_ref_text(sha):
         if sha in found:
             return found[sha]
+        if ext_resolve_ref:
+            try:
+                return ext_resolve_ref(sha)
+            except KeyError:
+                pass
         raise Postpone, (sha, )
     todo = list(self.iterobjects())
     while todo:
@@ -433,8 +438,8 @@ class PackData(object):
     if postponed:
         raise KeyError([sha_to_hex(h) for h in postponed.keys()])
 
-  def sorted_entries(self):
-    ret = list(self.iterentries())
+  def sorted_entries(self, resolve_ext_ref=None):
+    ret = list(self.iterentries(resolve_ext_ref))
     ret.sort()
     return ret
 

+ 1 - 1
dulwich/repo.py

@@ -245,7 +245,7 @@ class ObjectStore(object):
 
     def move_in_pack(self, path):
         p = PackData(path)
-        entries = p.sorted_entries()
+        entries = p.sorted_entries(self.get_raw)
         basename = os.path.join(self.pack_dir(), "pack-%s" % iter_sha1(entry[0] for entry in entries))
         write_pack_index_v2(basename+".idx", entries, p.calculate_checksum())
         os.rename(path, basename + ".pack")