diff options
author | John Ankarström <john@ankarstrom.se> | 2021-07-25 14:28:09 +0200 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2021-07-25 14:28:09 +0200 |
commit | c7cc59d242bf0e09a03e4bba111f987474d6b25f (patch) | |
tree | 5440622f6e5c7f03d26d89d08efd3dcbe56a3cbb /vipatch | |
parent | d825a4995fa8e663688fb106d02d14759cf58906 (diff) | |
download | patches-c7cc59d242bf0e09a03e4bba111f987474d6b25f.tar.gz |
vipatch: Support multiple diff headers for the same file
Diffstat (limited to 'vipatch')
-rwxr-xr-x | vipatch | 30 |
1 files changed, 16 insertions, 14 deletions
@@ -7,16 +7,23 @@ # number of added/removed lines. ep | awk -vname=${0##*/} ' -/^@@ / { head = $0 "\n"; next } -head && /^---/ { printpatch(); print; next } -head && /^\+/ { plus++ } -head && /^-/ { minus++ } -head && /^ / { same++ } -head { body = body $0 "\n"; next } - { print } -END { if (head) printpatch() } +/^@@ / { 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 @@ -26,16 +33,11 @@ function printpatch() { 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 } - 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 |