Quel est le format d’un fichier de patch?

Que signifie le suivant?

diff -rBNu src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java --- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700 +++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 14:11:55.000000000 -0700 @@ -4,9 +4,12 @@ + int CJK = 21; + int DIGIT = 22; int DEFAULT = 0; Ssortingng[] tokenImage = { "", + "\"OR\"", "", "", "", @@ -39,6 +42,8 @@ "\"\\\"\"", "\":\"", "\"/\"", + "\"(\"", + "\")\"", "\".\"", "\"@\"", "\"\\\'\"", 

L’option -u vous avez utilisée spécifie le format unifié. Dans ce format, les deux premières lignes sont un en-tête: --- est le fichier d’origine, +++ est le nouveau fichier et les horodatages.

@@ -têtes de bloc

Cela est suivi par des morceaux (changement de pièces) qui commencent par la syntaxe @@ -R,r +R,r @@ .

Ce sont deux plages, celle avec le - est la plage pour le bloc dans le fichier d’origine et celle avec le + la plage dans le nouveau fichier. Le R désigne le numéro de ligne où l’opération diff est lancée.

Les nombres après la virgule représentent le nombre de lignes affectées dans chaque fichier .

  • Chaque fois que vous supprimez une ligne, le nombre +r sera inférieur à -r .
  • Chaque fois que vous ajoutez une ligne, le nombre +r sera plus grand que -r
  • Changer une ligne appenda 0 au nombre +r . (même scope des lignes)

Morceaux de lignes de code

À l’intérieur de ces blocs, les lignes sont identifiées comme des ajouts ou des suppressions - signifie supprimer, + signifie append. Les lignes qui n’ont pas changé dans ce morceau n’auront ni + ni - devant.

Dans votre exemple, cela signifie que deux parties ou sections ont été modifiées entre les deux fichiers et que les lignes contenant + sont les nouvelles ajoutées, rien n’a été supprimé.

Vous pouvez trouver beaucoup plus d’informations sur la syntaxe en effectuant une recherche Google pour diff unifié.

L’ancien nom de fichier

 --- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700 

Le nouveau nom de fichier

 +++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 14:11:55.000000000 -0700 
  • -4 : le morceau commence à la ligne 4 dans l’ancien fichier (y compris les lignes de contexte);
  • 9 : nombre de lignes dans le bloc dans l’ancien fichier, y compris les lignes de contexte (donc total de lignes qui ont un - ou rien devant elles);
  • +4 : le morceau commence à la ligne 4 du nouveau fichier;
  • 12 : nombre de lignes dans le bloc dans le nouveau fichier, y compris les lignes de contexte (soit le total des lignes qui ont un + ou rien devant elles).

Remarque : j’ai modifié le diff pour inclure une ligne modifiée, donc une ligne supprimée suivie d’une ligne ajoutée.

 @@ -4,9 +4,12 @@ + int CJK = 21; + int DIGIT = 22; - int DEFAULT = 0; + int DEFAULT = 42; Ssortingng[] tokenImage = { "", + "\"OR\"", "", "", "", 

Même chose que ci-dessus, mais notez que le morceau dans le nouveau fichier commence 3 lignes de plus car le morceau précédent a ajouté une valeur nette de 3 lignes.

 @@ -39,6 +42,8 @@ "\"\\\"\"", "\":\"", "\"/\"", + "\"(\"", + "\")\"", "\".\"", "\"@\"", "\"\\\'\"", 

Les caractères + signifient que ces lignes ont été ajoutées depuis la dernière version de NutchAnalysisConstants.java . La ligne @@ vous indique que le diff a sauté à une autre section du fichier, en l’occurrence la ligne 39 dans l’original ou la ligne 43 dans la nouvelle.

Cela dépend de ce que vous demandez. Diff vous montre les différences entre deux fichiers. Dans votre cas, vous différenciez NutchAnalysisConstants.java de deux endroits différents et générez des informations sur ces différences.

-r à diff signifie “diff récursif”, bien que dans ce cas il ne fasse rien puisque vous différez des fichiers, pas des répertoires.

-B signifie ignorer les changements qui ne concernent que des lignes vides.

-N signifie que si, dans directory1, j’ai un fichier, mais qu’il n’est pas présent dans directory2, diff devrait le traiter comme si le fichier était présent mais vide dans directory2 (vous donnant ainsi le contenu complet du fichier dans directory1).

-u signifie utiliser le format de sortie unifié, qui n’est supporté que par GNU diff et GNU patch.

Pour ce que signifie la sortie, ce lien peut vous être utile.