Что означает «патч неожиданно заканчивается в середине строки»?

14

Это вывод моей команды исправления:

Hunk #11 merged at 4184,4190.
Hunk #12 merged at 4444.
Hunk #13 merged at 4944.
Hunk #14 NOT MERGED at 5106-5116.
Hunk #15 merged at 5290.
Hunk #16 merged at 5448.
patch unexpectedly ends in middle of line
Hunk #17 merged at 5608,5611.

Команда была

patch -d ~/SOME_DIR -p1 --merge --verbose -u

Патч был создан с использованием git:

git --git-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c

Что patch unexpectedly ends in middle of lineзначит, и это проблема? Имеется в виду лом 16 или 17? Что я могу найти в файле патча, чтобы выяснить, что вызывает это?

Пол Биггар
источник

Ответы:

11

Сообщение относится к ломоть 16.

Это обсуждение GitHub, вероятно, связано с вашей проблемой.

Речь идет о патче, который неожиданно заканчивается в середине строки сообщений из-за проблем с CRLF (возврат каретки, перевод строки), когда генерируемые git diff используются с патчем.

Чтобы процитировать заключение:

[..] мерзавец может быть очень разборчив в концах строк. Вы на окнах или нет? В любом случае, вы, вероятно, должны установить autocrlf в git config. Если вы работаете в Windows, вам нужно «true», если вы в Mac или Linux, вы должны использовать «input» [..]

В статье Работа с окончаниями строк GitHub подробно описывает вышеприведенное утверждение.

maxschlepzig
источник
1
Следует отметить, что спрашивающий спросил, что это плохо - завершение в середине строки - не проблема, а всего лишь предупреждение.
Росс
3

Если вы не используете git(комментарий @ maxslepzig был об использовании patch в контексте git), попробуйте добавить возврат каретки в конце вашего файла. Я сделал это и patchпринял мой патч.

Эйвери Чан
источник
2

Чтобы добавить к этой очень старой дискуссии:

Проблема, приводящая к предупреждению, отмеченному OP, обычно вызвана проблемами с окончаниями строки.

patch хочет задний перевод строки (LF), чтобы определить конец файла (и предупреждает об объединенном diff, который мог быть случайно обрезан)

  1. Добавить правильный перевод строки, не открывая файл для редактирования (что может изменить ваши окончания строк или убрать завершающие строки / пробелы в зависимости от настроек вашего редактора), вы можете сделать что-то простое, например:

    echo -e "\n" >> YOURPATCHFILE

    Это добавляет символ перевода строки в конец файла без каких-либо других изменений.

  2. Если ваш файл патча уже странный или вы хотите выполнить несколько возможных исправлений одновременно, вы можете исправить многие проблемы с кодировкой (в ascii), включая окончания строк (CR или CRLF - LF):

    dos2unix -k YOURPATCHFILE

    Возможно, вам придется установить бинарный файл dos2unix из диспетчера пакетов вашей ОС; т.е.

    • На основе Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (с заваркой): brew install dos2unix
ChrisN
источник