¿Qué significa 'parche inesperadamente termina en el medio de la línea'?

14

Este es el resultado de mi comando parche:

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.

El comando fue

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

El parche fue producido usando git:

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

¿Qué patch unexpectedly ends in middle of linesignifica, y es un problema? ¿Se refiere al trozo 16 o 17? ¿Qué puedo buscar en el archivo de parche para descubrir qué está causando esto?

Paul Biggar
fuente

Respuestas:

11

El mensaje se refiere a Hunk 16.

Esta discusión de GitHub probablemente esté relacionada con su problema.

Se trata de que el parche termine inesperadamente en medio de los mensajes de línea debido a problemas de CRLF (retorno de carro, salto de línea) cuando se usan diferencias generadas por git con el parche.

Para citar la conclusión:

[..] git puede ser muy exigente con las terminaciones de línea. ¿Estás en Windows o no? En cualquier caso, probablemente deberías configurar autocrlf en la configuración de git. Si estás en Windows, quieres "verdadero", si estás en Mac o Linux, debes usar "input" [..]

En el artículo Manejo de finales de línea, GitHub detalla la declaración anterior.

maxschlepzig
fuente
1
Cabe señalar que el interlocutor le preguntó que esto es malo; terminar en el medio de una línea no es un problema, solo una advertencia.
Ross
3

Si no está utilizando git(el comentario de @ maxslepzig fue sobre el uso de parches en el contexto de git), intente agregar un retorno de carro al final de su archivo. Lo hice y patchacepté mi parche.

Avery Chan
fuente
2

Para agregar a esta discusión muy antigua:

El problema que lleva a la advertencia que observó el OP generalmente es causado por problemas con las terminaciones de línea.

patch desea un avance de línea final (LF) para determinar el final del archivo (y advierte de una diferencia unificada que puede haberse truncado accidentalmente)

  1. Agregue el salto de línea adecuado sin abrir el archivo para editarlo (lo que podría modificar sus finales de línea o eliminar líneas / espacios finales según la configuración de su editor), puede hacer algo simple como:

    echo -e "\n" >> YOURPATCHFILE

    Esto agrega un carácter de salto de línea al final del archivo sin realizar ningún otro cambio.

  2. Si su archivo de parche ya es extraño o desea realizar varias correcciones posibles a la vez, puede corregir muchos problemas con la codificación (a ASCII), incluidas las terminaciones de línea (CR o CRLF a LF):

    dos2unix -k YOURPATCHFILE

    Puede que tenga que instalar el binario dos2unix desde el administrador de paquetes de su sistema operativo; es decir

    • Basado en Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (con cerveza): brew install dos2unix
ChrisN
fuente