web-dev-qa-db-fra.com

Hunk # 1 a échoué à 1. Qu'est-ce que cela signifie?

Je reçois le message d'erreur suivant lors de l'exécution de make et je ne sais absolument pas ce que cela signifie ni quoi faire. Quelqu'un peut-il m'éclairer ou me diriger dans la bonne direction?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch
patching file Makefile.am
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
make: *** [dvdnav] Error 1

J'essaie de compiler VLC pour Win32 (avec Linux).

54
JellicleCat

C'est une erreur générée par patch. Si vous ouvriez le .patch fichier, vous verriez qu'il est organisé en plusieurs segments, appelés "mecs". Chaque bloc identifie des morceaux de code correspondants (par des numéros de ligne) dans l'ancienne et la nouvelle version, les différences entre ces morceaux de code et leurs similitudes (le "contexte").

Un morceau peut échouer si les similitudes d'un morceau ne correspondent pas à ce qui est dans le fichier d'origine. Lorsque vous voyez cette erreur, c'est presque toujours parce que vous utilisez un correctif pour la version incorrecte du code que vous corrigez. Il existe plusieurs façons de contourner ce problème:

  • Obtenez une version mise à jour de libdvdnav qui inclut déjà le correctif (meilleure option).
  • Obtenir un .patch fichier pour la version de libdvdnav que vous corrigez.
  • Patch manuellement. Pour chaque morceau du correctif, essayez de localiser le fichier et les lignes correspondants dans libdvdnav et corrigez-les conformément aux instructions du correctif.
  • Prenez la version de libdvdnav qui est plus proche de la version de la .patch fichier était destiné à (probablement une mauvaise idée).
62
user824425

Conseils de débogage

  1. Ajoutez crlf à la fin du fichier patch et testez-le.
  2. essayez la commande --ignore-whitespace comme dans: markus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch voir tutoriel de markus
4
Ema

Dans certains cas, il n'y a aucune différence dans les versions de fichier, mais uniquement dans l'indentation, l'espacement, les fins de ligne ou les numéros de ligne.

Pour patcher malgré ces différences, il est possible d’utiliser les deux arguments suivants :

- ignore-whitespace: Il ignore les différences d'espaces (indentation, etc.).

- fuzz 3: l'option "--fuzz [~ # ~] x [~ # ~]" définit le facteur de fuzz maximum sur les lignes. Cette option ne s'applique qu'aux différences contextuelles et unifiées. il ignore jusqu'à [~ # ~] x [~ # ~] lignes lors de la recherche de l'emplacement où installer un morceau. Notez qu'un facteur fuzz plus élevé augmente les chances de créer un patch défectueux. Le facteur de fuzz par défaut est 2; il n'y a aucun intérêt à le fixer à plus que le nombre de lignes de contexte dans le diff, généralement 3.

N'oubliez pas l'utilisateur "--dry-run": il va essayer le patch sans l'appliquer.

Exemple :

patch --verbose --dry-run --ignore-whitespace --fuzz 3 < /path/to/patch.patch

Plus d'informations sur Fuzz:

https://www.gnu.org/software/diffutils/manual/html_node/Inexact.html

1
André DS

Suivez les instructions ici , cela a résolu mon problème.

vous devez exécuter la commande comme suit; patch -p0 --dry-run <chemin/vers/votre/patchFile/yourPatch.patch

0
Jehangir Wahid