git.fiddlerwoaroof.com
Browse code

fix: fix delta offset calculation

Edward Langley authored on 26/10/2023 06:28:22
Showing 3 changed files
... ...
@@ -78,16 +78,18 @@
78 78
 
79 79
 
80 80
 (defun get-ofs-delta-offset (buf)
81
-  (let ((idx 0))
81
+  (let* ((idx 0))
82 82
     (flet ((advance ()
83 83
              (prog1 (elt buf idx)
84 84
                (incf idx))))
85
-      (loop for c = (advance)
86
-            for ofs = (logand c 127)
87
-            for morep = (> (logand c 128) 0)
88
-            while morep
89
-            finally
90
-               (return (values (- ofs) idx))))))
85
+      (loop
86
+        for c = (advance)
87
+        for ofs = (logand c 127) then (+ (ash (1+ ofs)
88
+                                              7)
89
+                                         (logand c 127))
90
+        while (> (logand c 128) 0)
91
+        finally
92
+           (return (values (- ofs) idx))))))
91 93
 
92 94
 (defun decode-size (buf)
93 95
   (let ((parts ()))
... ...
@@ -155,3 +155,35 @@
155 155
                        :fwoar.cl-git.git-objects.pack
156 156
                        "4b5fa63702dd96796042e92787f464e28f09f17d")))
157 157
                     :encoding :utf-8)))))
158
+
159
+
160
+(defparameter *fake-repo-2* :fwoar.cl-git.git-objects.pack-2)
161
+(defmethod fwoar.cl-git::ref ((repo (eql *fake-repo-2*)) hash)
162
+  (fake-ref repo hash))
163
+(defmethod fwoar.cl-git::pack-files ((repo (eql *fake-repo-2*)))
164
+  (list
165
+   (let* ((pack-file (asdf:system-relative-pathname
166
+                      :co.fwoar.cl-git/tests
167
+                      "tests/sample-git-objects/pack-a0533639fdee4493fdbfc1b701872ace63b95e5f.pack"))
168
+          (index-file (asdf:system-relative-pathname
169
+                       :co.fwoar.cl-git/tests
170
+                       "tests/sample-git-objects/pack-a0533639fdee4493fdbfc1b701872ace63b95e5f.idx")))
171
+     (make-instance 'fwoar.cl-git::pack
172
+                    :repository nil
173
+                    :index index-file
174
+                    :pack pack-file))))
175
+
176
+(fiveam:def-test pack-files-offsets ()
177
+
178
+  (let* ((expectations-file
179
+           (asdf:system-relative-pathname
180
+            :co.fwoar.cl-git/tests
181
+            "tests/sample-git-objects/pack-a0533639fdee4493fdbfc1b701872ace63b95e5f.delta-bases"))
182
+         (expectations (uiop:read-file-form expectations-file)))
183
+    (loop for (ref . base-offset) in expectations
184
+          do (5am:is (equal base-offset
185
+                            (second
186
+                             (fwoar.cl-git::base
187
+                              (fwoar.cl-git::extract-object
188
+                               (fwoar.cl-git::packed-ref *fake-repo-2* ref)))))))
189
+    ))
158 190
new file mode 100644
... ...
@@ -0,0 +1,102 @@
1
+( ("5cb25684234f0bc9ddc42434805754b224f92f2c" . 3648)
2
+ ("62af1bf37cb1d91a426251ee5b09029833efe18c" . 8634)
3
+ ("f334556fc4f5675bb805ada20dadb8571924c713" . 11240)
4
+ ("e06b66967fa4fa005ccf00dcbc7d839b22259593" . 12273)
5
+ ("265a98fb79595e0067e53d8cf222dec4283f8525" . 12969)
6
+ ("9776df71b5ddf298c56e99b7291f9e68906cf049" . 15023)
7
+ ("cf8e6e10786a26ffcd6a3e0fdb97abdf1c9f0345" . 18539)
8
+ ("4707eca4ee0c70520ccdc57c0e831187b21271e7" . 19758)
9
+ ("f89fbdc08797f554113ead7fd92409e84b51b713" . 15023)
10
+ ("c516dfc248544509c3ae58e3a8c2ab81c225aa9c" . 20163)
11
+ ("224d09513abc65298c55d52e34e7dd6a97f8ecd8" . 15023)
12
+ ("31576396aff0fff28f69e0ef84571c0dc8cc43ec" . 20733)
13
+ ("a339f9dfc57b461e09d94c176fe90d90c13daf42" . 11240)
14
+ ("406b7f64a9ea8ac59da2a61036a389c9f0325f06" . 21182)
15
+ ("0673dcbe10b945d561a9c3c485fe28aab12b257c" . 21406)
16
+ ("d8c5107920aa70475ef806cba031e07b7ffc62c1" . 22416)
17
+ ("ae0a070133d1a14d6e940a0f790f40b37e885b22" . 24437)
18
+ ("87c2b9b2dfaa1fbf66b3fe88d3a925593886b159" . 15023)
19
+ ("66279b2fa08c9d0872e888b85fe14d9950e27326" . 24726)
20
+ ("e30a688cfd75bfb27d78264faccaaa80cb68dc37" . 7355)
21
+ ("91fca3db49d59fc2e560961fd3a75b3c6b44dadf" . 25132)
22
+ ("53d13ed284f8b57297d1b216e2bab7fb43f8db60" . 13350)
23
+ ("ac7221d134310fced0fc2d20a662e7659e98960e" . 7355)
24
+ ("956583ccfd66b86874ab390862b9e21bf0125195" . 25290)
25
+ ("5d91012a15f8893f7cdbfc15686926414d044e65" . 8634)
26
+ ("3aed167fd86a4ddc94fa064edbe6d1c6ea8a2c44" . 25290)
27
+ ("936ac49ab3ae312b0cc9467aab8a8534d452f0d2" . 25567)
28
+ ("c60d7303d8ccdd58e50249160b80d6fc9b57c387" . 25567)
29
+ ("36875efd06662d89803c72a69ff31a6ed0aea0c3" . 18539)
30
+ ("dbfe85d03296435b4a33ef3dc26456080e3f0263" . 11240)
31
+ ("ee379ef30e0cd080a3ef9333e2a8b01cbb04000f" . 22416)
32
+ ("e0e2c160ce8ee1114274c98cc6dbf3e5fd4197a8" . 25567)
33
+ ("cd59e0f2e993a77000d77b7f386c603892de356a" . 25567)
34
+ ("58adcd3ecfd494847646dc90b8214cb575ce7683" . 26079)
35
+ ("e69272bd90575f4dc99801a06287531bf2d09017" . 18539)
36
+ ("18d56071caf51761e073eb1d2eb49c185b674789" . 26300)
37
+ ("6e4821d169fc505dd2b598d4bf4bdfc512ea6ebd" . 20163)
38
+ ("d14096a450a8d5392698a2d959a17e696dd62af6" . 26451)
39
+ ("a4220a28d4800e38b8b8f85db0d97afc8b889293" . 20733)
40
+ ("89291277beacc08c2a982fc7bf1b15da8315ec6e" . 26079)
41
+ ("a7cbe10af08aed7b24b633649db6dc4cec011a3f" . 26079)
42
+ ("da3e1b59cf4e32ba8d843f7529f009e82c3a609b" . 26747)
43
+ ("663fd18f870932925511a32c7e0d2356d8fe26ba" . 25543)
44
+ ("028027ae078ed4bf26c6aeb083ee2187f7de73a7" . 26861)
45
+ ("e70a61be268cbaa6a7825295fbe54beaa3c59c71" . 26079)
46
+ ("1e000f7fc230cdebaf2d285766a6b8df2f038b06" . 21406)
47
+ ("9c8827bc556311dd4a71ec6ccc08860b1b415676" . 27750)
48
+ ("e1c10e80cdc707c337e2095cae8200c722c259f8" . 26300)
49
+ ("c99dcb3b970e5f9ff6e38216a823cec09d4b5068" . 26451)
50
+ ("62eadd630528aa78bcd0855c0e3ce8e72164c817" . 25980)
51
+ ("e7d2a96c2d218956d503f17c619cb69f26d8745d" . 27798)
52
+ ("2eb6f4572b4c917babf2d6a4c9751a8b77feb16a" . 27984)
53
+ ("966ad7406532a0cd95c77c42393f4127e199e047" . 12969)
54
+ ("d6859afc633d06b2c841a74d60987d4bc9ee1099" . 28500)
55
+ ("7052fbed9f3c10bc2727fd0db20550629293f07e" . 28150)
56
+ ("d67c0db9d755c7492e904a83b18c94c133bc20a7" . 28500)
57
+ ("10044b063ea5aa11a0ec0b77f601a2e15598b154" . 28401)
58
+ ("58b3d3041816618a70e0de4511c61fcdacb895c3" . 28647)
59
+ ("a701a1bec9d7514b9b56ad01fcd3ca9ff92ce906" . 25980)
60
+ ("20ab821930a16350f8c20966ade05f467fefa744" . 28749)
61
+ ("16b760a9d3478e4543b8bf3b4282c0e1c23cde62" . 21182)
62
+ ("4271cbd4035b61aefdf893a697669cafc673e7f1" . 28717)
63
+ ("164f3c875fb9eb728f354c448876e8ad500b6f1e" . 28150)
64
+ ("e8f144e2761cbea8310324c07f31c1d3a8fdf911" . 26672)
65
+ ("310a307fc54f40bfba1d475c92024ba6542b0315" . 12273)
66
+ ("3e6a9a272f26f34bcacc0a9992ade1ad612ed0c9" . 21182)
67
+ ("c6cc546b864cd9c8997ba1ef035b39167d4ddfff" . 28717)
68
+ ("220725554cbed54358f385d766fd713120d543cb" . 24726)
69
+ ("6851ec85107be5726b1369eb576c4c8ae9e153a3" . 29023)
70
+ ("a48dd93d1c5e70421f0fb2da57105b6b155f0fe4" . 28150)
71
+ ("26876ecf0d711a959a037b8bad65434bdf5387f0" . 15023)
72
+ ("7ba87f92cb3e26234543c36ebc32fe285a66c038" . 29744)
73
+ ("06ee9b09e87e21645743b800c152f652b8748ca0" . 30069)
74
+ ("ac605d74cc98676527d4d18d426176cd55f2ae75" . 30193)
75
+ ("0c0de8ab35998093c16386b9f3546dba3672f392" . 29612)
76
+ ("e3daca1c81cb31138e9f173de1ef6ed142ef72ef" . 21182)
77
+ ("9f115bb65d115525b781be14faa7230dc737dafd" . 30248)
78
+ ("c06a5cdde544c7345da76887071986cb9336d509" . 30317)
79
+ ("06a4ad0d26c5aa00b912e2c40d59038b620faa26" . 29693)
80
+ ("e16577ff964315b9215273946069c2a47f734907" . 30069)
81
+ ("b37b43e4044e725eea6d6cd87055dad3b2c54e75" . 30317)
82
+ ("97bd59ec403740c06ff368847c8937209b3ba8e9" . 30521)
83
+ ("c83b68c6597baed5bf78a5f734cf43c7a1aceb1b" . 21182)
84
+ ("e30c5c9580f7c8b3ab54ffedef1ea0eb710cc4c7" . 29523)
85
+ ("b768fc9ffe867185eda8fd72e4cad806a8a133dd" . 30573)
86
+ ("24d5250e48eceb1574fbf6e7c49d11f6c9aa6c96" . 30069)
87
+ ("dd0bbea71b4390f3265211084476925f1ec517cf" . 30573)
88
+ ("0f6ac7e2e9ca89bb1f4a19a3bf1f026a5c3da2c8" . 21182)
89
+ ("dca156cce70f9d6a4c6cddebda6c5a21eb04e35b" . 28717)
90
+ ("2a1a18be82d5b164276865620861d7186f5cd7da" . 30806)
91
+ ("9a68815c624b91fa400f06da3c8911d3943baf53" . 30069)
92
+ ("7569881ce48d6073dce64a1b9e92a0c012d63a98" . 24726)
93
+ ("23265ddc885b55bcc44f7da49c5c2e9d6800d8c5" . 31015)
94
+ ("15160d98378f5bca96cfd2450b58697a2e4315c4" . 12969)
95
+ ("5e1e0673f45cceca14e3efb499eb5dafcb563db2" . 21182)
96
+ ("912d31a169ddf1fca122d4c6fe1b1e6be7cd1176" . 31118)
97
+ ("48ba2aede24e9b48a17d31372c8fc01d86799209" . 31281)
98
+ ("7f353e0e418f6f098f59a74aefdfed5654985c6d" . 29744)
99
+ ("3c41df4946f91eca01c6ce7267834943bd3f69bf" . 28717)
100
+ ("eb9344e7aeacb7665af1c2db2f86e5792515de5b" . 12969)
101
+ ("0bffcb03469a159b29fed1d6be2809d0b69e2647" . 31757)
102
+)