website/content/blog/patch-files.md
2024-05-18 22:07:33 -04:00

1.9 KiB

title date draft tags math medium_enabled
Creating Patch Files 2024-05-18T20:10:21-04:00 false
false false

Distributing software can be difficult. Is the shared library called x on this distribution or is it called y? This may lead to a lot of distribution specific code.

It might not make sense to commit these changes to the main software repository. An alternative is to create patch files. These are files that capture exactly how you want to update a given file.

Let's take the following C code as an example:

#include <stdio.h>

int main(void)
{
  printf("Goodbye World\n");
  return 0;
}

Instead, we want for it to print out the classic "Hello World". To do this, first let us save the original file.

cp hello-world.c hello-world.c.orig

Then let's edit hello-world.c to produce the desired result

#include <stdio.h>

int main(void)
{
  printf("Hello World\n");
  return 0;
}

Now we can create the patch file.

diff -Naur hello-world.c.orig hello-world.c > hello.patch

The options of diff are the following:

Flag Description
-N Treat absent files as empty
-a Treat all files as text
-u Output 3 lines of unified context
-r Recursively compare any subdirectories found

This will output the following patch file

--- hello-world.c.orig  2024-05-12 20:41:27.708297085 -0400
+++ hello-world.c       2024-05-12 20:41:36.742348955 -0400
@@ -2,7 +2,7 @@
 
 int main(void)
 {
-  printf("Goodbye World\n");
+  printf("Hello World\n");
   return 0;
 }

In order to test out the patch, let us revert the hello-world.c file to it's original state.

cp hello-world.c.orig hello-world.c

Now apply the patch

patch < hello.patch

To undo the patch

patch -R hello-world.c < hello.patch