Using the 'patch' and 'diff' utilitiesWindows Research Kernel @ HPI
In some upcoming postings, we will describe simple demo modifications of the Windows Research Kernel. The examples will be downloadable from this site as kernel patches and small demo applications.
diff tool can be used to write the differences
between two source trees (normally a modified and an unmodified
version) into a single (text) file. With
created patch file can be applied to an unmodified source tree. In
this way, kernel modifications can be distributed without having to
provide the whole source code and without a common repository.
Creating a patch
It is assumed that you have a directory %temp% with two subdirectories %temp%\original and %temp%\modified. Each of this subdirectories should only contain the source code without object files or other intermediately created files. In a cmd-shell opened in the %temp% directory a patch can be created by typing
diff -Naur original modified --strip-trailing-cr >
-Naur option tells the diff command that (1)
missing files in the either directory are considered as empty files,
(2) all files are considered as text files, (3) three lines of
"context" information are put into the patch file, and (3) the
source code directories are traversed and compared recursively.
Afterwards, the file
test.patch contains the patch
information which can be distributed by EMail or put on a website
A simple example: the following boxes show the original text file and the modified version. Both files are saved in a directory structure as described above.
diff utility creates the following patch
diff -Naur original/test.txt modified/test.txt
- original/test.txt 2007-05-22 14:50:51.841199200 +0200
+++ modified/test.txt 2007-05-22 14:56:16.670944400 +0200
@@ -1,5 +1,4 @@
\ Kein Zeilenumbruch am Dateiende.
The '+' and '-' signs at the beginning of the lines in the patch file indicate whether a line was added/modified or removed.
Applying a patch
It is assumed that you have an unmodified base source code tree of the original source code version saved in %original%.
If you get a patch file created as described above, you can copy it to the %original% directory and (if the patch file is named %name%.patch) type
patch -p1 < %name%.patch.
This will apply the patch to the unmodified version and transform it into the patched version.
p option tells the
patch tool to
strip a specific number of leading components from file names used
in the patch file. An example: the patch file shown above contains
the directory names ("original" and "modified") used by the patch
creator. If you have a directory "foo" which contains the orginal
source code, the
patch utility needs information about
how to resolve the file names. Therefore, the first component (the
patch creation directory) can be stripped from the filenames by
patch patches which contain
only the differences between two source code trees can be created
and re-applied to unmodified versions. In this way modified source
code versions can be easily distributed or made available for