mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-11-09 10:40:34 -05:00
New post
This commit is contained in:
parent
cfef367750
commit
b6640abdea
1 changed files with 91 additions and 0 deletions
91
content/blog/patch-files.md
Normal file
91
content/blog/patch-files.md
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
---
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in a new issue