O que significa 'patch inesperadamente termina no meio da linha'?

14

Esta é a saída do meu 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.

O comando foi

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

O patch foi produzido usando o git:

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

O que patch unexpectedly ends in middle of linesignifica e é um problema? Refere-se ao pedaço 16 ou 17? O que posso procurar no arquivo de patch para descobrir o que está causando isso?

Paul Biggar
fonte

Respostas:

11

A mensagem refere-se ao Hunk 16.

Esta discussão do GitHub provavelmente está relacionada ao seu problema.

Trata-se de um patch que termina inesperadamente no meio das mensagens da linha devido a problemas de CRLF (retorno de carro, avanço de linha) quando as diferenças geradas pelo git são usadas no patch.

Para citar a conclusão:

[..] git pode ser muito exigente quanto às terminações de linha. Você está no Windows ou não? De qualquer forma, você provavelmente deve definir o autocrlf na configuração do git. Se você estiver no Windows, deseja "true", se estiver no Mac ou Linux, use "input" [..]

No artigo Lidando com terminações de linha, o GitHub detalha a declaração acima.

maxschlepzig
fonte
1
Note-se, o interlocutor perguntou que isso é ruim - terminar no meio de uma linha não é um problema - apenas um aviso.
Ross
3

Se você não estiver usando git(o comentário de @ maxslepzig foi sobre o uso de patch no contexto de git), tente adicionar um retorno de carro no final do seu arquivo. Eu fiz isso e patchaceitei o meu patch.

Avery Chan
fonte
2

Para adicionar a essa discussão muito antiga:

O problema que levou ao aviso observado pelo OP geralmente é causado por problemas com terminações de linha.

patch deseja um feed de linha à direita (LF) para determinar o final do arquivo (e avisa sobre um diff unificado que pode ter sido acidentalmente truncado)

  1. Anexe o avanço de linha adequado sem abrir o arquivo para edição (o que pode modificar as terminações de sua linha ou remover linhas / espaços à direita, dependendo das configurações do seu editor), você pode fazer algo simples como:

    echo -e "\n" >> YOURPATCHFILE

    Isso anexa um caractere de avanço de linha ao final do arquivo sem fazer outras alterações.

  2. Se o seu arquivo de correção já estiver estranho ou você desejar realizar várias correções possíveis ao mesmo tempo, poderá corrigir muitos problemas com a codificação (para ascii), incluindo as terminações de linha (CR ou CRLF para LF):

    dos2unix -k YOURPATCHFILE

    Pode ser necessário instalar o binário dos2unix a partir do gerenciador de pacotes do seu sistema operacional; ie

    • Baseado no Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (com fermentação): brew install dos2unix
ChrisN
fonte