aboutsummaryrefslogtreecommitdiff
path: root/vipatch
blob: 0a8f54da6f1eba7613b97a191bbe86feae8957fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
}
'