What is the format of a patch file?

Solution 1:

The -u option you used specifies the unified format. In that format the first two lines is a header: --- is the original file, +++ is the new file, and the timestamps.

@@ block headers

That is then followed by chunks (change hunks) that starts with the @@ -R,r +R,r @@ syntax.

Those are two ranges, the one with the - is the range for the chunk in the original file, and the one with the + the range in the new file. The R designates the line number where the diff operation is started.

The numbers after the comma are the number of affected lines in each file.

  • Every time you remove a line, the +r number will be smaller than -r.
  • Every time you add a line, the +r number will be bigger than -r
  • Changing a line will add 0 to the +r number. (same scope of lines)

Chunks of code lines

Within these chunks lines are identified as additions or deletions - means delete, + means addition. Lines that did not change in that chunk will have neither + or - front of it.

In your example it means there are two chunks, or sections, that changed between the two files and the lines with + in it are the new ones added, nothing was deleted.

You can find much more information about the syntax by doing a google search for unified diff.

Solution 2:

The old file name

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

The new file name

+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java  2009-03-10 14:11:55.000000000 -0700
  • -4: chunk begins at line 4 in old file (including context lines);
  • 9: number of lines in the chunk in old file including context lines (so total of lines that have a - or nothing in front of them);
  • +4: chunk begins at line 4 in the new file;
  • 12: number of lines in the chunk in new file including context lines (so total of lines that have a + or nothing in front of them).

Notice: I changed the diff to include a modified line, so a deleted line followed by an added line.

@@ -4,9 +4,12 @@

+  int CJK = 21;
+  int DIGIT = 22;

-  int DEFAULT = 0;
+  int DEFAULT = 42;

   String[] tokenImage = {
     "<EOF>",
+    "\"OR\"",
     "<WORD>",
     "<ACRONYM>",
     "<SIGRAM>",

Same as above, but notice the chunk in the new file starts 3 lines further because the previous chunk added a net worth of 3 lines.

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