gendiff - Unix, Linux Command


gendiff - utility to aid in error-free diff file generation


gendiff <directory> <diff-extension>


gendiff is a rather simple script which aids in generating a diff file from a single directory. It takes a directory name and a "diff-extension" as its only arguments. The diff extension should be a unique sequence of characters added to the end of all original, unmodified files. The output of the program is a diff file which may be applied with the patch program to recreate the changes.

The usual sequence of events for creating a diff is to create two identical directories, make changes in one directory, and then use the diff utility to create a list of differences between the two. Using gendiff eliminates the need for the extra, original and unmodified directory copy. Instead, only the individual files that are modified need to be saved.

Before editing a file, copy the file, appending the extension you have chosen to the filename. I.e. if you were going to edit somefile.cpp and have chosen the extension "fix", copy it to somefile.cpp.fix before editing it. Then edit the first copy (somefile.cpp).

After editing all the files you need to edit in this fashion, enter the directory one level above where your source code resides, and then type

    $ gendiff somedirectory .fix > mydiff-fix.patch

You should redirect the output to a file (as illustrated) unless you want to see the results on stdout.


Consider two files, Original file, HelloWorld.c.orig and modified file, Original file: HelloWorld.c



int main()
        printf("Hello World...!\n");



int main()
        char *msg = "Hello World...!\n";

Step 1 - Create patch file

$ gendiff `pwd` .orig > HellWorld.c.patch

Step 2 - Examine the patch file

$ cat HellWorld.c.patch
diff -up /home/HellWorld.c.orig /home/HellWorld.c
--- /home/HellWorld.c.orig  2016-02-06 13:05:59.000000000 +0530
+++ /home/HellWorld.c       2016-02-06 13:06:26.000000000 +0530
@@ -2,5 +2,6 @@

 int main()
-       printf("Hello World...!\n");
+       char *msg = "Hello World...!\n";
+       printf(msg);

The unchanged lines in file are indented with space. New lines are indicated with "+" and lines deleted are indicated with "-"

Step 3 - Apply the patch to original file

$ mv HelloWorld.c.orig HelloWorld.c
$ patch HellWorld.c HellWorld.c.patch