The format of a patch file


What does the following mean ?

diff -rBNu src.orig/java/org/apache/nutch/analysis/ src/java/org/apache/nutch/analysis/
--- src.orig/java/org/apache/nutch/analysis/ 2009-03-10 11:34:01.000000000 -0700
+++ src/java/org/apache/nutch/analysis/  2009-03-10 14:11:55.000000000 -0700
@@ -4,9 +4,12 @@

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

   int DEFAULT = 0;

   String[] tokenImage = {
+    "\"OR\"",
@@ -39,6 +42,8 @@
+    "\"(\"",
+    "\")\"",

Best Answer

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.