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

Add simple pack dump utility.

Jelmer Vernooij пре 16 година
родитељ
комит
3d810a09c3
3 измењених фајлова са 49 додато и 0 уклоњено
  1. 41 0
      bin/dumppack
  2. 2 0
      dulwich/objects.py
  3. 6 0
      dulwich/pack.py

+ 41 - 0
bin/dumppack

@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# dumppack - Simple pack dumper for dulwich
+# Copyright (C) 2008 Jelmer Vernooij <jelmer@samba.org>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+
+
+from dulwich.pack import PackData, PackIndex, sha_to_hex
+import sys
+
+basename = sys.argv[1]
+print "Index file:"
+print "-----------"
+x = PackIndex(basename + ".idx")
+if not x.check():
+	print "CHECKSUM DOES NOT MATCH"
+print "Length: %d" % len(x)
+print "Entries in index:"
+for name, offset, crc in x.iterentries():
+	print "\t%s: %d" % (sha_to_hex(name), offset)
+print ""
+
+x = PackData(basename + ".pack")
+print "Pack file:"
+print "----------"
+if not x.check():
+	print "CHECKSUM DOES NOT MATCH"
+print "Number of objects: %d" % len(x)

+ 2 - 0
dulwich/objects.py

@@ -167,6 +167,7 @@ class ShaFile(object):
     """
     return self.sha().digest() == other.sha().digest()
 
+
 class Blob(ShaFile):
   """A Git Blob object."""
 
@@ -191,6 +192,7 @@ class Blob(ShaFile):
     shafile._update_contents()
     return shafile
 
+
 class Tree(ShaFile):
   """A Git tree object"""
 

+ 6 - 0
dulwich/pack.py

@@ -53,6 +53,12 @@ def hex_to_sha(hex):
     ret += chr(int(hex[i:i+2], 16))
   return ret
 
+def sha_to_hex(sha):
+  ret = ""
+  for i in sha:
+      ret += "%02x" % ord(i)
+  return ret
+
 MAX_MMAP_SIZE = 256 * 1024 * 1024
 
 def simple_mmap(f, offset, size, access=mmap.ACCESS_READ):