Преглед изворни кода

Pass fileobject rather than filename to write_pack_data().

Jelmer Vernooij пре 16 година
родитељ
комит
8575be8217
1 измењених фајлова са 12 додато и 5 уклоњено
  1. 12 5
      dulwich/pack.py

+ 12 - 5
dulwich/pack.py

@@ -479,10 +479,14 @@ class SHA1Writer(object):
         self.sha1.update(data)
         self.f.write(data)
 
-    def close(self):
+    def write_sha(self):
         sha = self.sha1.digest()
         assert len(sha) == 20
         self.f.write(sha)
+        return sha
+
+    def close(self):
+        sha = self.write_sha()
         self.f.close()
         return sha
 
@@ -525,18 +529,21 @@ def write_pack_object(f, type, object):
 
 
 def write_pack(filename, objects):
-    entries, data_sum = write_pack_data(filename + ".pack", objects)
+    f = open(filename + ".pack", 'w')
+    try:
+        entries, data_sum = write_pack_data(f, objects)
+    except:
+        f.close()
     write_pack_index_v2(filename + ".idx", entries, data_sum)
 
 
-def write_pack_data(filename, objects):
+def write_pack_data(f, objects):
     """Write a new pack file.
 
     :param filename: The filename of the new pack file.
     :param objects: List of objects to write.
     :return: List with (name, offset, crc32 checksum) entries, pack checksum
     """
-    f = open(filename, 'w')
     entries = []
     f = SHA1Writer(f)
     f.write("PACK")               # Pack header
@@ -549,7 +556,7 @@ def write_pack_data(filename, objects):
         t, o = o.as_raw_string()
         offset = write_pack_object(f, t, o)
         entries.append((sha1, offset, crc32))
-    return entries, f.close()
+    return entries, f.write_sha()
 
 
 def write_pack_index_v1(filename, entries, pack_checksum):