mirror of https://github.com/torvalds/linux.git
80 lines
1.4 KiB
Awk
Executable File
80 lines
1.4 KiB
Awk
Executable File
#!/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
|
|
}
|