#!/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 } '