diff options
-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 +} +' |