I have a directory contains several files to be modified. Instead of doing changes manually(because there are so many files) i downloaded a diff file(made by some other user), this diff file is executed by a .bat file.
let me make it more systematic.
WinDDK_7600.16385.1_patch.bat and path of this file is(C:\Users\kunze\Documents\Visual Studio 2010\Projects\busmaster-master\Documents\1 Development Environment\files)contents of this file are
@echo on
set PATH=%PATH%;%ProgramFiles%\Git\bin
patch -p1 -d C:/ < WinDDK_7600.16385.1.diff
pause
When i run bat file this will run WinDDK_7600.16385.1.diff and this difference file has changes for many fileslocated in C:\WinDDK. Path of this file is C:\Users\kunze\Documents\Visual Studio 2010\Projects\busmaster-master\Documents\1 Development Environment\files
Files for which differences need to be updated are located in this directory C:\WinDDK
I already have set path environment variable for git/bin
Can someone please let me know what changes should i made in my WinDDK_7600.16385.1_patch.bat file so that it will find and update all the files located in C:\WinDDK directory
I have tried several times and every time i am getting this error "Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354" ? whats the issue ?
.diff files, the patch tool and their relevance to GitFirst of all, this problem has nothing to do with Git. Git for Windows, which you supposedly have installed on your computer, just happens to be shipped with the Windows port of patch—a program to apply changes described by specially-formatted files. Specifically, GfW includes the GNU patch program.
The patch.exe program supplied with GfW is located under %ProgramFiles%\Git\bin (unless you've overriden the installation location).
.diff file contain and how patch worksTo cite the Wikipedia article linked above, a diff file looks like this:
--- /path/to/original ''timestamp''
+++ /path/to/new ''timestamp''
@@ -1,3 +1,9 @@
+This is an important
+notice! It should
+therefore be located at
+the beginning of this
+document!
+
This part of the
document has stayed the
same from version to
@@ -5,16 +11,10 @@
be shown if it doesn't
change. Otherwise, that
would not be helping to
-compress the size of the
-changes.
-
-This paragraph contains
-text that is outdated.
-It will be deleted in the
-near future.
+compress anything.
It is important to spell
-check this dokument. On
+check this document. On
the other hand, a
misspelled word isn't
the end of the world.
Here's what we have here:
The @@ ... @@ blocks delimit "hunks" which describe where in the original file the piece to change by this hunk is located, how many lines it originally contained and how many it will contain after patching.
The next (and most important) thing about the hunk is change markers: + denote added lines, - denote deleted lines while lines prefixed with (a single space character) do not change and provide context for the patch tool to be able to perform "fuzzy matching"—based not only on line count but on actual file content as well.
patch tool worksThe patch tool takes the .diff file and
Reads the first hunk, locates it in the file it found, and applies the patch from the hunk.
If patching the hunk fails, patch creates a special "rejects" file (by combining the tail name of the file it attempted to patch plus the .rej extension) and writes there the failed hunk.
Goes to the next hunk and repeats until the end of the patch file is hit of the new header is found.
If the next header is found, it repeats the steps starting from (2), otherwise it exits.
patch tool locates the files to patchMost often, headers in patch files contain relative pathnames (like foo/bar/baz.c) and the patch tool goes like this:
Two command-line options affect the patch tool's behaviour:
-d <dir> option tell it to change its current directory to <dir> before doing its work.The -p N option tell it to trim N path components off the pathname extracted from the header before further considering it.
This means that with -p1 passed to it, patch would convert foo/bar/baz.c to bar/baz.c before trying to locate that file.
By now, you should be able to fully understand what your batch file does, and I ask you to work this out to stop considering all this the black voodoo.
patch toolMy guess is that you've hit an unfortunate bug which occasionally manifests itself in various Windows ports of patch—a problem with EOL markers: the tool simply chokes on CR+LF sequences.
Possible ways to work around this:
git apply as explained here—Git does not use patch.exe but rather its own machinery which is taught by GfW porters to work okay with Windows EOLs.Try other ports of patch, for instance this one from the GnuWin32 project.
Note that you might hit some UAC problem with it; here is how to fix it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With