From 09c0720ee7f4d949f3f779bb26ccb60faad56cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Mon, 26 Jul 2021 19:32:37 +0200 Subject: Move patch utilities to bin/ --- bin/vipatch | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 bin/vipatch (limited to 'bin/vipatch') diff --git a/bin/vipatch b/bin/vipatch new file mode 100755 index 0000000..d860f93 --- /dev/null +++ b/bin/vipatch @@ -0,0 +1,50 @@ +#!/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. + +ep | awk -vname=${0##*/} ' +/^@@ / { if (head) printpatch(); head = $0 "\n"; next } +head && /^---/ { print; next } +head && /^\+\+\+/ { print; next } +head && /^\+/ { plus++ } +head && /^-/ { minus++ } +head && /^ / { same++ } +head { body = body $0 "\n"; next } + { print } +END { if (head) printpatch() } + +function printpatch() { + match(head, /^@@ -[0-9]+,[0-9]+ \+[0-9]+,/) + prefix = substr(head, RSTART, RLENGTH) + + match(head, / @@.*/) + suffix = substr(head, RSTART, RLENGTH) + + match(head, /,[0-9]+/) + old = substr(head, RSTART+1, RLENGTH-1) + new = old + plus - minus + + diff = old - same - minus + if (diff != 0) { + printf "%s: %d %s incorrectly %s\n", name, abs(diff), + (abs(diff) > 1) ? "lines" : "line", + (diff > 0) ? "removed" : "added" > "/dev/stderr" + printf "under header%s\n", substr(suffix, 4) > "/dev/stderr" + head = "" + exit 1 + } + + printf "%s%d%s", prefix, new, suffix + printf "%s", body + + head = ""; body = ""; plus = 0; minus = 0; same = 0 +} + +function abs(n) { + return (n > 0) ? n : -n; +} +' -- cgit v1.2.3