[Mingw-users] Question about 'patching' source code.

Back to archive index
Niklas Holsti nikla****@tidor*****
Sat Oct 12 16:16:32 JST 2019


On 19-10-12 03:39 , David Wall wrote:
> I regularly 'build' GnuCOBOL compiler from source code - however it is
> supplied in 'tar' format.
> I use 'tar' to unpack it and then I need to make changes to certain
> files all the time.
>
> Is there any program in Mingw 6.3.0 that I can utilise to do these
> patches for me.

The "patch" and "diff" tools are designed for this.

> I installed msys-patch and checked thru the documentation - but it
> processes a 'diff' file and
> that confused me no end. Maybe I'll have to investigate how to produce a
> 'diff' file.

Yes.

This is the process: first,

1. Make a copy of all the original files from the "tar".

2. Edit the copy manually, applying the changes you need (which is what 
you have done so far for all "tar" versions, so you could use the last 
version of your edited files instead).

3. Run "diff" to compare the original file set with the manually edited 
file set. Store the resulting diff output as a "diff file". This file a 
record of the changes that you made manually; it identifies the files 
that were changed, the places in the files that were changed, and the 
change (old text => new text).

When, later, you get a new "tar", you run "patch" on the new files using 
the "diff file" that you got from step 3 above. "Patch" then reapplies 
the same changes you did on the original "tar" file set and which were 
recorded in the "diff file".

"Patch" tolerates a certain amount of evolution in the "tar" files from 
one version to the next, but if there is too much of that -- for 
example, if a function that you changed, as shown in the "diff" file, no 
longer exists in the new "tar" files or has been moved somewhere far 
away -- "patch" reports an error and then you have to consider what to 
do and perhaps edit something manually again. If you have to do that, 
you can then make, with "diff", a new "diff file" that reflects this 
evolution of the "tar" files, and the new "diff file" should work better 
when the next new "tar" arrives.

> What I'd like to do is tell a patch program to:
>
> 1. Find this file     2. Find this text in the file    3. Replace found
> text with new text.

That is exactly what the patch+diff combination can do.

HTH,

Niklas Holsti



More information about the MinGW-Users mailing list
Back to archive index