libegit2 icon indicating copy to clipboard operation
libegit2 copied to clipboard

blob-binary test failed on Emacs 28.

Open cireu opened this issue 3 years ago • 1 comments

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.

cireu avatar May 16 '22 10:05 cireu

There's new module_make_unibyte_string for Emacs 28. We should use this to create from binary blob contet.

cireu avatar May 16 '22 10:05 cireu