mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-10-30 01:12:07 -04:00
92 lines
1.9 KiB
Markdown
92 lines
1.9 KiB
Markdown
|
---
|
||
|
title: "Creating Patch Files"
|
||
|
date: 2024-05-18T20:10:21-04:00
|
||
|
draft: false
|
||
|
tags: []
|
||
|
math: false
|
||
|
medium_enabled: 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:
|
||
|
|
||
|
```c
|
||
|
#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.
|
||
|
|
||
|
```bash
|
||
|
cp hello-world.c hello-world.c.orig
|
||
|
```
|
||
|
|
||
|
Then let's edit `hello-world.c` to produce the desired result
|
||
|
|
||
|
```c
|
||
|
#include <stdio.h>
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
printf("Hello World\n");
|
||
|
return 0;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Now we can create the patch file.
|
||
|
|
||
|
```bash
|
||
|
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
|
||
|
|
||
|
```diff
|
||
|
--- 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.
|
||
|
|
||
|
```bash
|
||
|
cp hello-world.c.orig hello-world.c
|
||
|
```
|
||
|
|
||
|
Now apply the patch
|
||
|
|
||
|
```bash
|
||
|
patch < hello.patch
|
||
|
```
|
||
|
|
||
|
To undo the patch
|
||
|
|
||
|
```bash
|
||
|
patch -R hello-world.c < hello.patch
|
||
|
```
|
||
|
|