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
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) |