79 lines · 1.4 KB · Text
RawDownload
#!/usr/bin/awk -f# SPDX-License-Identifier: GPL-2.0## Use #line directives to preserve original __LINE__ numbers across patches to# avoid unwanted compilation changes. BEGIN {	in_hunk = 0	skip    = 0} /^--- / {	skip = $2 !~ /\.(c|h)$/	print	next} /^@@/ {	if (skip) {		print		next	} 	in_hunk = 1 	# @@ -1,3 +1,4 @@:	#   1: line number in old file	#   3: how many lines the hunk covers in old file	#   1: line number in new file	#   4: how many lines the hunk covers in new file 	match($0, /^@@ -([0-9]+)(,([0-9]+))? \+([0-9]+)(,([0-9]+))? @@/, m) 	# Set 'cur' to the old file's line number at the start of the hunk.  It	# gets incremented for every context line and every line removal, so	# that it always represents the old file's current line number.	cur = m[1] 	# last = last line number of current hunk	last = cur + (m[3] ? m[3] : 1) - 1 	need_line_directive = 0 	print	next} {	if (skip || !in_hunk || $0 ~ /^\\ No newline at end of file/) {		print		next	} 	# change line	if ($0 ~ /^[+-]/) {		# inject #line after this group of changes		need_line_directive = 1 		if ($0 ~ /^-/)			cur++ 		print		next	} 	# If this is the first context line after a group of changes, inject	# the #line directive to force the compiler to correct the line	# numbering to match the original file.	if (need_line_directive) {		print "+#line " cur		need_line_directive = 0	} 	if (cur == last)		in_hunk = 0 	cur++	print}