git.fiddlerwoaroof.com
Browse code

Add EXTRACT-OBJECT-OF-TYPE to give a place for decoding logic

Ed Langley authored on 07/05/2019 00:39:01
Showing 2 changed files
... ...
@@ -42,11 +42,18 @@
42 42
         (return-from find-object-in-pack-files
43 43
           (values pack mid))))))
44 44
 
45
+(defgeneric extract-object-of-type (type s)
46
+  (:method ((type integer) s)
47
+    (extract-object-of-type (object-type->sym type)
48
+                            s))
49
+  (:method ((type (eql :commit)) (s stream))
50
+    (chipz:decompress nil (chipz:make-dstate 'chipz:zlib) s)))
51
+
45 52
 (defun read-object-from-pack (s)
46 53
   (let* ((metadata (fwoar.bin-parser:extract-high s))
47 54
          (type (get-object-type metadata))
48 55
          (size (get-object-size metadata))
49
-         (object-data (chipz:decompress nil (chipz:make-dstate 'chipz:zlib) s)))
56
+         (object-data (extract-object-of-type type s)))
50 57
     (list (cons :type (object-type->sym type))
51 58
           (cons :decompressed-size size)
52 59
           (cons :object-data object-data)
... ...
@@ -115,9 +115,10 @@
115 115
 
116 116
 (defun read-object-metadata-from-pack (s)
117 117
   (let* ((metadata (fwoar.bin-parser:extract-high s))
118
-         (type (get-object-type metadata))
119
-         (size (get-object-size metadata)))
120
-    (values (cons :type (object-type->sym type))
118
+         (type-raw (get-object-type metadata))
119
+         (size (get-object-size metadata))
120
+         (type (object-type->sym type-raw)))
121
+    (values (cons :type type)
121 122
             (cons :decompressed-size size))))
122 123
 
123 124
 (defun get-first-commits-from-pack (idx pack n)