it-swarm-es.tech

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

Esta es la salida de mi comando de 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 se produjo usando git:

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

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

14
Paul Biggar

El mensaje se refiere a Hunk 16.

Esto discusión de GitHub probablemente esté relacionado con su problema.

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

Para citar la conclusión:

[..] git puede ser muy exigente con los finales de línea. ¿Estás en Windows o no? En cualquier caso, probablemente debería configurar autocrlf en la configuración de git. Si está en Windows, quiere "verdadero", si está en Mac o Linux, debe usar "entrada" [..]

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

11
maxschlepzig

Si no está usando git (el comentario de @ maxslepzig fue sobre el uso de parche en el contexto de git), intente agregar un retorno de carro al final de su archivo. Hice eso y patch acepté mi parche.

3
Avery Chan

Para agregar a esta discusión muy antigua:

El problema que lleva a la advertencia que señaló el OP generalmente es causado por problemas con los finales de línea.

patchquiere 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 avance de línea adecuado sin abrir el archivo para editarlo (lo que podría modificar los 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 si desea realizar varias correcciones posibles a la vez, puede corregir muchos problemas con la codificación (a ascii), incluidos los finales 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 preparación): brew install dos2unix
2
ChrisN