blob-binary test failed on Emacs 28.
libegit2 version: https://github.com/magit/libegit2/commit/0ef8b13aef011a98b7da756e4f1ce3bb18e4d55a libgit2 version: 1.4.3 Emacs version: 28.1.
Error Log
starting phase `check'
Running tests...
/gnu/store/zga679c4nldah9l8dhd5a4hdy820hcyf-cmake-minimal-3.21.4/bin/ctest --force-new-ctest-process
Test project /tmp/guix-build-emacs-libgit-20200515-1.0ef8b13.drv-0/build
Start 1: libegit2_annotated-commit
1/29 Test #1: libegit2_annotated-commit ........ Passed 0.28 sec
Start 2: libegit2_blame
2/29 Test #2: libegit2_blame ................... Passed 0.29 sec
Start 3: libegit2_blob
3/29 Test #3: libegit2_blob ....................***Failed 0.28 sec
Running 4 tests (2022-05-16 05:38:35+0000, selector ‘t’)
Test blob-binary backtrace:
signal(wrong-type-argument (utf-8-string-p "\177ELF\2\1\1\0\0\0\0\0\
apply(signal (wrong-type-argument (utf-8-string-p "\177ELF\2\1\1\0\0
(setq value-42 (apply fn-40 args-41))
(unwind-protect (setq value-42 (apply fn-40 args-41)) (setq form-des
(if (unwind-protect (setq value-42 (apply fn-40 args-41)) (setq form
(let (form-description-44) (if (unwind-protect (setq value-42 (apply
(let ((value-42 'ert-form-evaluation-aborted-43)) (let (form-descrip
(let* ((fn-40 #'string=) (args-41 (condition-case err (let ((signal-
(let* ((repo (libgit-repository-open path)) (blob (libgit-revparse-s
(let ((default-directory path)) (init) (commit-change "filename" str
(progn (make-directory path 'parents) (let ((default-directory path)
(unwind-protect (progn (make-directory path 'parents) (let ((default
(let ((path "/tmp/guix-build-emacs-libgit-20200515-1.0ef8b13.dr...")
(let* ((str (unibyte-string 127 69 76 70 2 1 1 0 0 0 0 0 0 0 0 0 3 0
(let ((lexical-binding nil)) (let* ((str (unibyte-string 127 69 76 7
(lambda nil (let ((lexical-binding nil)) (let* ((str (unibyte-string
ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
ert-run-test(#s(ert-test :name blob-binary :documentation nil :body
ert-run-or-rerun-test(#s(ert--stats :selector t :tests [#s(ert-test
ert-run-tests(t #f(compiled-function (event-type &rest event-args) #
ert-run-tests-batch(nil)
ert-run-tests-batch-and-exit()
command-line-1(("-L" "/tmp/guix-build-emacs-libgit-20200515-1.0ef8b1
command-line()
normal-top-level()
Test blob-binary condition:
(wrong-type-argument utf-8-string-p "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\7\0\0\0\0\0\0@\0\0\0\0\0\0\0\270\33\0\0\0\0\0\0\0\0\0\0@\08\0\11\0@\0\35\0\34\0\6\0\0\0\5\0\0\0@\0\0\0\0\0\0\0")
FAILED 1/4 blob-binary (0.018840 sec)
passed 2/4 blob-create-fromdisk (0.009633 sec)
passed 3/4 blob-create-fromstring (0.008941 sec)
passed 4/4 blob-text (0.018801 sec)
Ran 4 tests, 3 results as expected, 1 unexpected (2022-05-16 05:38:36+0000, 0.172075 sec)
1 unexpected results:
FAILED blob-binary
Start 4: libegit2_branch
4/29 Test #4: libegit2_branch .................. Passed 0.51 sec
Start 5: libegit2_checkout
5/29 Test #5: libegit2_checkout ................ Passed 0.22 sec
Start 6: libegit2_cherrypick
6/29 Test #6: libegit2_cherrypick .............. Passed 0.38 sec
Start 7: libegit2_commit
7/29 Test #7: libegit2_commit .................. Passed 0.26 sec
Start 8: libegit2_config
8/29 Test #8: libegit2_config .................. Passed 0.12 sec
Start 9: libegit2_describe
9/29 Test #9: libegit2_describe ................ Passed 0.14 sec
Start 10: libegit2_diff
10/29 Test #10: libegit2_diff .................... Passed 0.28 sec
Start 11: libegit2_graph
11/29 Test #11: libegit2_graph ................... Passed 0.26 sec
Start 12: libegit2_ignore
12/29 Test #12: libegit2_ignore .................. Passed 0.09 sec
Start 13: libegit2_index
13/29 Test #13: libegit2_index ................... Passed 0.27 sec
Start 14: libegit2_merge
14/29 Test #14: libegit2_merge ................... Passed 0.50 sec
Start 15: libegit2_message
15/29 Test #15: libegit2_message ................. Passed 0.08 sec
Start 16: libegit2_pathspec
16/29 Test #16: libegit2_pathspec ................ Passed 0.20 sec
Start 17: libegit2_reference
17/29 Test #17: libegit2_reference ............... Passed 0.29 sec
Start 18: libegit2_reflog
18/29 Test #18: libegit2_reflog .................. Passed 0.22 sec
Start 19: libegit2_remote
19/29 Test #19: libegit2_remote .................. Passed 0.28 sec
Start 20: libegit2_repository
20/29 Test #20: libegit2_repository .............. Passed 0.47 sec
Start 21: libegit2_reset
21/29 Test #21: libegit2_reset ................... Passed 0.27 sec
Start 22: libegit2_revert
22/29 Test #22: libegit2_revert .................. Passed 0.28 sec
Start 23: libegit2_revparse
23/29 Test #23: libegit2_revparse ................ Passed 0.16 sec
Start 24: libegit2_revwalk
24/29 Test #24: libegit2_revwalk ................. Passed 0.32 sec
Start 25: libegit2_signature
25/29 Test #25: libegit2_signature ............... Passed 0.10 sec
Start 26: libegit2_status
26/29 Test #26: libegit2_status .................. Passed 0.15 sec
Start 27: libegit2_submodule
27/29 Test #27: libegit2_submodule ............... Passed 0.47 sec
Start 28: libegit2_tag
28/29 Test #28: libegit2_tag ..................... Passed 0.19 sec
Start 29: libegit2_tree
29/29 Test #29: libegit2_tree .................... Passed 0.11 sec
97% tests passed, 1 tests failed out of 29
Total Test time (real) = 7.48 sec
The following tests FAILED:
3 - libegit2_blob (Failed)
Errors while running CTest
make: *** [Makefile:94: test] Error 8
Test suite failed, dumping logs.
IMO the problem is module_make_string in Emacs 28 force its input be a UTF-8 string. libgit-blob-rawcontent use this to create string for binary content, this is undefined behaviour, Eli Zaretskii claims if there's raw bytes in input string, module_make_string will raise an error.
So since https://github.com/emacs-mirror/emacs/commit/3252f3149673bbd6919d5d9a5a672e2f3730741d, it's no longer possible.
We should consider change the representation of binary blob, maybe use vector of 8 bit number.
There's new module_make_unibyte_string for Emacs 28. We should use this to create from binary blob contet.