Che cosa significa "patch termina inaspettatamente a metà linea"?


14

Questo è l'output del mio comando patch:

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.

Il comando era

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

La patch è stata prodotta usando git:

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

Cosa patch unexpectedly ends in middle of linesignifica, ed è un problema? Si riferisce al pezzo 16 o 17? Cosa posso cercare nel file patch per capire cosa sta causando questo?

Risposte:


11

Il messaggio si riferisce a Hunk 16.

Questa discussione su GitHub è probabilmente correlata al tuo problema.

Riguarda la patch che termina inaspettatamente nei messaggi a metà riga a causa di problemi CRLF (ritorno a capo, avanzamento riga) quando vengono usati i diff generati da git con la patch.

Per citare la conclusione:

[..] git può essere molto esigente riguardo alle terminazioni di linea. Sei su Windows o no? Ad ogni modo, dovresti probabilmente impostare autocrlf nella configurazione di git. Se sei su Windows, vuoi "vero", se sei su Mac o Linux, dovresti usare "input" [..]

Nell'articolo Affrontare le terminazioni di riga GitHub descrive in dettaglio la precedente dichiarazione.


1
Va notato, l'interrogatore ha chiesto che questo è un male - terminare nel mezzo di una linea non è un problema - solo un avvertimento.
Ross,

3

Se non stai usando git(il commento di @ maxslepzig riguardava l'uso della patch nel contesto di git), prova ad aggiungere un ritorno a capo alla fine del tuo file. L'ho fatto e patchho accettato la mia patch.


2

Per aggiungere a questa discussione molto antica:

Il problema che porta all'avvertimento rilevato dall'OP è generalmente causato da problemi con le terminazioni di linea.

patch desidera un feed di riga finale (LF) per determinare la fine del file (e avverte di un diff unificato che potrebbe essere stato accidentalmente troncato)

  1. Aggiungi il corretto avanzamento di riga senza aprire il file per la modifica (che potrebbe modificare le terminazioni di riga o eliminare le righe / gli spazi finali in base alle impostazioni del tuo editor) puoi fare qualcosa di semplice come:

    echo -e "\n" >> YOURPATCHFILE

    Ciò aggiunge un carattere di avanzamento riga alla fine del file senza apportare altre modifiche.

  2. Se il tuo file di patch è già strano o vuoi passare attraverso diverse possibili correzioni contemporaneamente, puoi correggere molti problemi con la codifica (in ascii) comprese le terminazioni di riga (CR o CRLF in LF):

    dos2unix -k YOURPATCHFILE

    Potrebbe essere necessario installare il binario dos2unix dal gestore dei pacchetti del sistema operativo; vale a dire

    • Basato su Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (con birra): brew install dos2unix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.