This series of patch tries to ease the life of musl libc user and clear those last failure on Linux with musl libc. The second patch is a complete rewrite. Doan Tran Cong Danh (3): t0028: eliminate non-standard usage of printf configure.ac: define ICONV_OMITS_BOM if necessary sequencer: reencode to utf-8 before arrange rebase's todo list configure.ac | 49 ++++++++++++++++++++++++++++++++ sequencer.c | 2 +- t/t0028-working-tree-encoding.sh | 4 +-- 3 files changed, 52 insertions(+), 3 deletions(-) Range-diff against v1: 1: 840c40cea1 ! 1: 8b30028425 t0028: eliminate non-standard usage of printf @@ Commit message one, two, or three-digit octal number, shall be written as a byte with the numeric value specified by the octal number. - printf '\xfe\xff' in an extension of some libc. + printf '\xfe\xff' in an extension of some shell. + Dash, a popular yet simple shell, do not implement this extension. - With dash: - $ printf '\xfe\xff' | xxd - 00000000: 5c78 6665 5c78 6666 \xfe\xff + This wasn't caught by most people running the tests, even though + common shells like dash don't handle hex escapes, because their + systems don't trigger the NO_UTF16_BOM prereq. But systems with musl + libc do; when combined with dash, the test fails. - Correct its usage. + Correct it. Signed-off-by: Doan Tran Cong Danh <congdanhqx@xxxxxxxxx> - Despite that dash's printf doesn't accept \x escape sequence. - - My glibc box (with sh linked to dash) can run the test just fine. - But my musl box couldn't run the test, (because the header). ## t/t0028-working-tree-encoding.sh ## @@ t/t0028-working-tree-encoding.sh: test_lazy_prereq NO_UTF32_BOM ' 2: 4a28ee7ef6 < -: ---------- configure.ac: define ICONV_OMITS_BOM if necessary -: ---------- > 2: 7c2c6f0603 configure.ac: define ICONV_OMITS_BOM if necessary 3: c8da3990e5 ! 3: b7927b2723 sequencer: reencode to utf-8 before arrange rebase's todo list @@ Commit message Thus, t3900 is failing on Linux with musl libc. + This problem wasn't specific to musl libc. On Linux with glibc, this + problem can be observed by: + + for encoding in utf-8 iso-8859-1; do + # commit using the encoding + echo $encoding >file && git add file + echo "éñcödèd with $encoding" | iconv -f utf-8 -t $encoding | + git -c i18n.commitEncoding=$encoding commit -F - + # and then fixup without it + echo "$encoding fixed" >file && git add file + git commit --fixup HEAD + done + git rebase -i --autosquash --root + Reencode to utf-8 before arranging rebase's todo list. Signed-off-by: Doan Tran Cong Danh <congdanhqx@xxxxxxxxx> - The todo list shown to user has already been reencoded by sequencer_make_script, - without this patch it looks like this: - - $ head -3 .git/rebase-merge/git-rebase-todo | xxd - 00000000: 7069 636b 2065 6633 3961 3033 201b 2442 pick ef39a03 .$B - 00000010: 244f 1b28 421b 2442 246c 1b28 421b 2442 $O.(B.$B$l.(B.$B - 00000020: 2452 1b28 421b 2442 245b 1b28 421b 2442 $R.(B.$B$[.(B.$B - 00000030: 2455 1b28 420a 7069 636b 2062 3832 3931 $U.(B.pick b8291 - 00000040: 3336 2073 7175 6173 6821 201b 2442 244f 36 squash! .$B$O - 00000050: 1b28 421b 2442 246c 1b28 421b 2442 2452 .(B.$B$l.(B.$B$R - 00000060: 1b28 421b 2442 245b 1b28 421b 2442 2455 .(B.$B$[.(B.$B$U - 00000070: 1b28 420a 7069 636b 2062 3532 3132 6437 .(B.pick b5212d7 - 00000080: 2069 6e74 6572 6d65 6469 6174 6520 636f intermediate co - 00000090: 6d6d 6974 0a mmit. ## sequencer.c ## @@ sequencer.c: int todo_list_rearrange_squash(struct todo_list *todo_list) -- 2.24.0.rc2.296.geaf699fcc3