Co oznacza „łatka nieoczekiwanie kończy się na środku linii”?

14

To jest wynik mojego polecenia 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.

Rozkaz był

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

Łatka została wyprodukowana przy użyciu git:

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

Co to patch unexpectedly ends in middle of lineznaczy i czy to problem? Czy odnosi się to do przystojniaka 16 czy 17? Czego mogę szukać w pliku łatki, aby dowiedzieć się, co to powoduje?

Paul Biggar
źródło

Odpowiedzi:

11

Wiadomość odnosi się do Przystojniaka 16.

Ta dyskusja GitHub jest prawdopodobnie związana z Twoim problemem.

Chodzi o to, że łatka nieoczekiwanie kończy się w środkowej linii komunikatów z powodu problemów CRLF (powrót karetki, wysuw wiersza), gdy z łatką używane są różnice generowane przez git.

Cytując wniosek:

[..] git może być bardzo wybredny, jeśli chodzi o zakończenia linii. Jesteś na Windowsie czy nie? W każdym razie powinieneś prawdopodobnie ustawić autocrlf w git config. Jeśli korzystasz z systemu Windows, chcesz mieć wartość „prawda”, jeśli korzystasz z systemu Mac lub Linux, powinieneś użyć opcji „input” [..]

W artykule Postępowanie z zakończeniami linii GitHub szczegółowo opisuje powyższe stwierdzenie.

maxschlepzig
źródło
1
Należy zauważyć, że pytający zapytał go, że to źle - zakończenie na środku linii nie stanowi problemu - tylko ostrzeżenie.
Ross,
3

Jeśli nie używasz git(komentarz @ maxslepzig dotyczy używania łatki w kontekście git), spróbuj dodać znak powrotu karetki na końcu pliku. Zrobiłem to i patchzaakceptowałem moją łatkę.

Avery Chan
źródło
2

Aby dodać do tej bardzo starej dyskusji:

Problem prowadzący do ostrzeżenia odnotowanego przez PO jest generalnie spowodowany problemami z zakończeniami linii.

patch chce podawania końca wiersza (LF) w celu ustalenia końca pliku (i ostrzega o zunifikowanym pliku różnicowym, który mógł zostać przypadkowo obcięty)

  1. Dołącz odpowiedni kanał bez otwierania pliku do edycji (co może modyfikować zakończenia linii lub usuwać końcowe linie / spacje w zależności od ustawień edytora), możesz zrobić coś prostego:

    echo -e "\n" >> YOURPATCHFILE

    Dodaje to znak końca linii na końcu pliku bez żadnych innych zmian.

  2. Jeśli plik łatki jest już dziwny lub chcesz przejść przez kilka możliwych poprawek jednocześnie, możesz rozwiązać wiele problemów z kodowaniem (do ascii), w tym zakończeń linii (CR lub CRLF do LF):

    dos2unix -k YOURPATCHFILE

    Może być konieczne zainstalowanie pliku binarnego dos2unix z menedżera pakietów systemu operacyjnego; to znaczy

    • Oparty na Debianie / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (z naparem): brew install dos2unix
ChrisN
źródło