Skip to content

Commit

Permalink
fix: fix delta offset calculation
Browse files Browse the repository at this point in the history
  • Loading branch information
fiddlerwoaroof committed Oct 26, 2023
1 parent b749807 commit a1d069b
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 7 deletions.
16 changes: 9 additions & 7 deletions delta.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -78,16 +78,18 @@


(defun get-ofs-delta-offset (buf)
(let ((idx 0))
(let* ((idx 0))
(flet ((advance ()
(prog1 (elt buf idx)
(incf idx))))
(loop for c = (advance)
for ofs = (logand c 127)
for morep = (> (logand c 128) 0)
while morep
finally
(return (values (- ofs) idx))))))
(loop
for c = (advance)
for ofs = (logand c 127) then (+ (ash (1+ ofs)
7)
(logand c 127))
while (> (logand c 128) 0)
finally
(return (values (- ofs) idx))))))

(defun decode-size (buf)
(let ((parts ()))
Expand Down
32 changes: 32 additions & 0 deletions tests/git-objects.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,35 @@
:fwoar.cl-git.git-objects.pack
"4b5fa63702dd96796042e92787f464e28f09f17d")))
:encoding :utf-8)))))


(defparameter *fake-repo-2* :fwoar.cl-git.git-objects.pack-2)
(defmethod fwoar.cl-git::ref ((repo (eql *fake-repo-2*)) hash)
(fake-ref repo hash))
(defmethod fwoar.cl-git::pack-files ((repo (eql *fake-repo-2*)))
(list
(let* ((pack-file (asdf:system-relative-pathname
:co.fwoar.cl-git/tests
"tests/sample-git-objects/pack-a0533639fdee4493fdbfc1b701872ace63b95e5f.pack"))
(index-file (asdf:system-relative-pathname
:co.fwoar.cl-git/tests
"tests/sample-git-objects/pack-a0533639fdee4493fdbfc1b701872ace63b95e5f.idx")))
(make-instance 'fwoar.cl-git::pack
:repository nil
:index index-file
:pack pack-file))))

(fiveam:def-test pack-files-offsets ()

(let* ((expectations-file
(asdf:system-relative-pathname
:co.fwoar.cl-git/tests
"tests/sample-git-objects/pack-a0533639fdee4493fdbfc1b701872ace63b95e5f.delta-bases"))
(expectations (uiop:read-file-form expectations-file)))
(loop for (ref . base-offset) in expectations
do (5am:is (equal base-offset
(second
(fwoar.cl-git::base
(fwoar.cl-git::extract-object
(fwoar.cl-git::packed-ref *fake-repo-2* ref)))))))
))
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
( ("5cb25684234f0bc9ddc42434805754b224f92f2c" . 3648)
("62af1bf37cb1d91a426251ee5b09029833efe18c" . 8634)
("f334556fc4f5675bb805ada20dadb8571924c713" . 11240)
("e06b66967fa4fa005ccf00dcbc7d839b22259593" . 12273)
("265a98fb79595e0067e53d8cf222dec4283f8525" . 12969)
("9776df71b5ddf298c56e99b7291f9e68906cf049" . 15023)
("cf8e6e10786a26ffcd6a3e0fdb97abdf1c9f0345" . 18539)
("4707eca4ee0c70520ccdc57c0e831187b21271e7" . 19758)
("f89fbdc08797f554113ead7fd92409e84b51b713" . 15023)
("c516dfc248544509c3ae58e3a8c2ab81c225aa9c" . 20163)
("224d09513abc65298c55d52e34e7dd6a97f8ecd8" . 15023)
("31576396aff0fff28f69e0ef84571c0dc8cc43ec" . 20733)
("a339f9dfc57b461e09d94c176fe90d90c13daf42" . 11240)
("406b7f64a9ea8ac59da2a61036a389c9f0325f06" . 21182)
("0673dcbe10b945d561a9c3c485fe28aab12b257c" . 21406)
("d8c5107920aa70475ef806cba031e07b7ffc62c1" . 22416)
("ae0a070133d1a14d6e940a0f790f40b37e885b22" . 24437)
("87c2b9b2dfaa1fbf66b3fe88d3a925593886b159" . 15023)
("66279b2fa08c9d0872e888b85fe14d9950e27326" . 24726)
("e30a688cfd75bfb27d78264faccaaa80cb68dc37" . 7355)
("91fca3db49d59fc2e560961fd3a75b3c6b44dadf" . 25132)
("53d13ed284f8b57297d1b216e2bab7fb43f8db60" . 13350)
("ac7221d134310fced0fc2d20a662e7659e98960e" . 7355)
("956583ccfd66b86874ab390862b9e21bf0125195" . 25290)
("5d91012a15f8893f7cdbfc15686926414d044e65" . 8634)
("3aed167fd86a4ddc94fa064edbe6d1c6ea8a2c44" . 25290)
("936ac49ab3ae312b0cc9467aab8a8534d452f0d2" . 25567)
("c60d7303d8ccdd58e50249160b80d6fc9b57c387" . 25567)
("36875efd06662d89803c72a69ff31a6ed0aea0c3" . 18539)
("dbfe85d03296435b4a33ef3dc26456080e3f0263" . 11240)
("ee379ef30e0cd080a3ef9333e2a8b01cbb04000f" . 22416)
("e0e2c160ce8ee1114274c98cc6dbf3e5fd4197a8" . 25567)
("cd59e0f2e993a77000d77b7f386c603892de356a" . 25567)
("58adcd3ecfd494847646dc90b8214cb575ce7683" . 26079)
("e69272bd90575f4dc99801a06287531bf2d09017" . 18539)
("18d56071caf51761e073eb1d2eb49c185b674789" . 26300)
("6e4821d169fc505dd2b598d4bf4bdfc512ea6ebd" . 20163)
("d14096a450a8d5392698a2d959a17e696dd62af6" . 26451)
("a4220a28d4800e38b8b8f85db0d97afc8b889293" . 20733)
("89291277beacc08c2a982fc7bf1b15da8315ec6e" . 26079)
("a7cbe10af08aed7b24b633649db6dc4cec011a3f" . 26079)
("da3e1b59cf4e32ba8d843f7529f009e82c3a609b" . 26747)
("663fd18f870932925511a32c7e0d2356d8fe26ba" . 25543)
("028027ae078ed4bf26c6aeb083ee2187f7de73a7" . 26861)
("e70a61be268cbaa6a7825295fbe54beaa3c59c71" . 26079)
("1e000f7fc230cdebaf2d285766a6b8df2f038b06" . 21406)
("9c8827bc556311dd4a71ec6ccc08860b1b415676" . 27750)
("e1c10e80cdc707c337e2095cae8200c722c259f8" . 26300)
("c99dcb3b970e5f9ff6e38216a823cec09d4b5068" . 26451)
("62eadd630528aa78bcd0855c0e3ce8e72164c817" . 25980)
("e7d2a96c2d218956d503f17c619cb69f26d8745d" . 27798)
("2eb6f4572b4c917babf2d6a4c9751a8b77feb16a" . 27984)
("966ad7406532a0cd95c77c42393f4127e199e047" . 12969)
("d6859afc633d06b2c841a74d60987d4bc9ee1099" . 28500)
("7052fbed9f3c10bc2727fd0db20550629293f07e" . 28150)
("d67c0db9d755c7492e904a83b18c94c133bc20a7" . 28500)
("10044b063ea5aa11a0ec0b77f601a2e15598b154" . 28401)
("58b3d3041816618a70e0de4511c61fcdacb895c3" . 28647)
("a701a1bec9d7514b9b56ad01fcd3ca9ff92ce906" . 25980)
("20ab821930a16350f8c20966ade05f467fefa744" . 28749)
("16b760a9d3478e4543b8bf3b4282c0e1c23cde62" . 21182)
("4271cbd4035b61aefdf893a697669cafc673e7f1" . 28717)
("164f3c875fb9eb728f354c448876e8ad500b6f1e" . 28150)
("e8f144e2761cbea8310324c07f31c1d3a8fdf911" . 26672)
("310a307fc54f40bfba1d475c92024ba6542b0315" . 12273)
("3e6a9a272f26f34bcacc0a9992ade1ad612ed0c9" . 21182)
("c6cc546b864cd9c8997ba1ef035b39167d4ddfff" . 28717)
("220725554cbed54358f385d766fd713120d543cb" . 24726)
("6851ec85107be5726b1369eb576c4c8ae9e153a3" . 29023)
("a48dd93d1c5e70421f0fb2da57105b6b155f0fe4" . 28150)
("26876ecf0d711a959a037b8bad65434bdf5387f0" . 15023)
("7ba87f92cb3e26234543c36ebc32fe285a66c038" . 29744)
("06ee9b09e87e21645743b800c152f652b8748ca0" . 30069)
("ac605d74cc98676527d4d18d426176cd55f2ae75" . 30193)
("0c0de8ab35998093c16386b9f3546dba3672f392" . 29612)
("e3daca1c81cb31138e9f173de1ef6ed142ef72ef" . 21182)
("9f115bb65d115525b781be14faa7230dc737dafd" . 30248)
("c06a5cdde544c7345da76887071986cb9336d509" . 30317)
("06a4ad0d26c5aa00b912e2c40d59038b620faa26" . 29693)
("e16577ff964315b9215273946069c2a47f734907" . 30069)
("b37b43e4044e725eea6d6cd87055dad3b2c54e75" . 30317)
("97bd59ec403740c06ff368847c8937209b3ba8e9" . 30521)
("c83b68c6597baed5bf78a5f734cf43c7a1aceb1b" . 21182)
("e30c5c9580f7c8b3ab54ffedef1ea0eb710cc4c7" . 29523)
("b768fc9ffe867185eda8fd72e4cad806a8a133dd" . 30573)
("24d5250e48eceb1574fbf6e7c49d11f6c9aa6c96" . 30069)
("dd0bbea71b4390f3265211084476925f1ec517cf" . 30573)
("0f6ac7e2e9ca89bb1f4a19a3bf1f026a5c3da2c8" . 21182)
("dca156cce70f9d6a4c6cddebda6c5a21eb04e35b" . 28717)
("2a1a18be82d5b164276865620861d7186f5cd7da" . 30806)
("9a68815c624b91fa400f06da3c8911d3943baf53" . 30069)
("7569881ce48d6073dce64a1b9e92a0c012d63a98" . 24726)
("23265ddc885b55bcc44f7da49c5c2e9d6800d8c5" . 31015)
("15160d98378f5bca96cfd2450b58697a2e4315c4" . 12969)
("5e1e0673f45cceca14e3efb499eb5dafcb563db2" . 21182)
("912d31a169ddf1fca122d4c6fe1b1e6be7cd1176" . 31118)
("48ba2aede24e9b48a17d31372c8fc01d86799209" . 31281)
("7f353e0e418f6f098f59a74aefdfed5654985c6d" . 29744)
("3c41df4946f91eca01c6ce7267834943bd3f69bf" . 28717)
("eb9344e7aeacb7665af1c2db2f86e5792515de5b" . 12969)
("0bffcb03469a159b29fed1d6be2809d0b69e2647" . 31757)
)

0 comments on commit a1d069b

Please sign in to comment.