simple euristic for further free packing improvements
[gitweb.git] / pack.h
diff --git a/pack.h b/pack.h
index 08e120dca664f43f8c12a2ce59cb28a67315500a..694e0c56f0b67c1ae9b7a94a243aca7b8859e50c 100644 (file)
--- a/pack.h
+++ b/pack.h
@@ -1,23 +1,35 @@
 #ifndef PACK_H
 #define PACK_H
 
+/*
+ * The packed object type is stored in 3 bits.
+ * The type value 0 is a reserved prefix if ever there is more than 7
+ * object types, or any future format extensions.
+ */
 enum object_type {
-       OBJ_NONE,
-       OBJ_COMMIT,
-       OBJ_TREE,
-       OBJ_BLOB,
-       OBJ_TAG,
-       OBJ_DELTA,
+       OBJ_EXT = 0,
+       OBJ_COMMIT = 1,
+       OBJ_TREE = 2,
+       OBJ_BLOB = 3,
+       OBJ_TAG = 4,
+       /* 5/6 for future expansion */
+       OBJ_DELTA = 7,
 };
 
 /*
  * Packed object header
  */
 #define PACK_SIGNATURE 0x5041434b      /* "PACK" */
+#define PACK_VERSION 2
+#define pack_version_ok(v) ((v) == htonl(2) || (v) == htonl(3))
 struct pack_header {
        unsigned int hdr_signature;
        unsigned int hdr_version;
        unsigned int hdr_entries;
 };
 
+extern int verify_pack(struct packed_git *, int);
+extern int check_reuse_pack_delta(struct packed_git *, unsigned long,
+                                 unsigned char *, unsigned long *,
+                                 enum object_type *);
 #endif