Que signifie «le patch se termine de façon inattendue au milieu de la ligne»?

14

Voici la sortie de ma commande de 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.

La commande était

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

Le patch a été produit en utilisant git:

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

Qu'est-ce que cela patch unexpectedly ends in middle of linesignifie et est-ce un problème? Cela fait-il référence au gros morceau 16 ou 17? Que puis-je rechercher dans le fichier de correctif pour déterminer la cause de ce problème?

Paul Biggar
la source

Réponses:

11

Le message fait référence à Hunk 16.

Cette discussion GitHub est probablement liée à votre problème.

Il s'agit du patch qui se termine de manière inattendue au milieu des messages de ligne en raison de problèmes CRLF (chariot-retour, saut de ligne) lorsque les différences générées par git sont utilisées avec le patch.

Pour citer la conclusion:

[..] git peut être très pointilleux sur les fins de ligne. Êtes-vous sur Windows ou non? En tout cas, vous devriez probablement définir autocrlf dans la configuration git. Si vous êtes sur Windows, vous voulez "vrai", si vous êtes sur mac ou linux, vous devez utiliser "entrée" [..]

Dans l'article Gérer les fins de ligne, GitHub détaille la déclaration ci-dessus.

maxschlepzig
la source
1
Il convient de noter que l'interrogateur lui a demandé que c'était mauvais - se terminer au milieu d'une ligne n'est pas un problème - juste un avertissement.
Ross
3

Si vous n'utilisez pas git(le commentaire de @ maxslepzig concernait l'utilisation du patch dans le contexte de git), essayez d'ajouter un retour chariot à la fin de votre fichier. Je l'ai fait et patchj'ai accepté mon patch.

Avery Chan
la source
2

Pour ajouter à cette très vieille discussion:

Le problème menant à l'avertissement que l'OP a noté est généralement causé par des problèmes de fin de ligne.

patch souhaite un saut de ligne (LF) afin de déterminer la fin du fichier (et avertit d'un diff unifié qui pourrait avoir été accidentellement tronqué)

  1. Ajoutez le saut de ligne approprié sans ouvrir le fichier pour le modifier (ce qui pourrait modifier vos fins de ligne ou supprimer les lignes / espaces de fin en fonction des paramètres de votre éditeur), vous pouvez faire quelque chose de simple comme:

    echo -e "\n" >> YOURPATCHFILE

    Cela ajoute un caractère de saut de ligne à la fin du fichier sans apporter d'autres modifications.

  2. Si votre fichier correctif est déjà bizarre ou si vous souhaitez passer par plusieurs correctifs possibles à la fois, vous pouvez corriger de nombreux problèmes d'encodage (vers ascii), y compris les fins de ligne (CR ou CRLF à LF):

    dos2unix -k YOURPATCHFILE

    Vous devrez peut-être installer le binaire dos2unix à partir du gestionnaire de packages de votre système d'exploitation; c'est à dire

    • Basé sur Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (avec infusion): brew install dos2unix
ChrisN
la source