diff options
author | John Ankarström <john@ankarstrom.se> | 2021-07-18 21:11:04 +0200 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2021-07-18 21:11:04 +0200 |
commit | 447405c38386167db4921b0e46d1cf8d2dc47c84 (patch) | |
tree | 299f190c7ce593c67babedbd79351b09becaf724 /vipatch | |
parent | 2deabc98f6ca8fd36165bbcb800affea8d990b63 (diff) | |
download | patches-447405c38386167db4921b0e46d1cf8d2dc47c84.tar.gz |
Add vipatch script
Diffstat (limited to 'vipatch')
-rwxr-xr-x | vipatch | 54 |
1 files changed, 54 insertions, 0 deletions
@@ -0,0 +1,54 @@ +#!/bin/sh + +# vipatch -- edit unified diff + +# This is a simple awk script that re-adjusts headers in +# a patch generated by diff -u, depending on the actual +# number of added/removed lines. As the script performs no +# error checks, it is up to the user to edit (and verify) +# the patch correctly. + +ep | awk ' +/^@@ / { + head = $0 "\n" + next +} + +head && /^---/ { + end() + print + next +} + +head && /^\+/ { plus++ } +head && /^-/ { minus++ } + +head { + body = body $0 "\n" + next +} + +{ print } + +END { end() } + +function end() { + match(head, /,[0-9]+/) + old = substr(head, RSTART+1, RLENGTH-1) + new = old + plus - minus + + match(head, /^@@ -[0-9]+,[0-9]+ \+[0-9]+,/) + prefix = substr(head, RSTART, RLENGTH) + + match(head, / @@.*/) + suffix = substr(head, RSTART, RLENGTH) + + printf "%s%d%s", prefix, new, suffix + printf "%s", body + + head = "" + body = "" + plus = 0 + minus = 0 +} +' |