devtools: add script to ease backport of renamed files

With all the library folders renamed to remove the "librte_" prefix,
we need to fixup patches for easier backport, i.e. add back in the
prefix for any references to those renamed files.

In the script itself we use a general approach to allow other functions
to be added in future for other modifications needed to patches.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
This commit is contained in:
Bruce Richardson 2021-04-20 11:22:31 +01:00 committed by Thomas Monjalon
parent 99a2dd955f
commit 7e06c0fe30
2 changed files with 54 additions and 0 deletions

View File

@ -87,6 +87,7 @@ F: devtools/checkpatches.sh
F: devtools/get-maintainer.sh
F: devtools/git-log-fixes.sh
F: devtools/load-devel-config
F: devtools/update-patches.py
F: devtools/words-case.txt
F: license/
F: .editorconfig

53
devtools/update-patches.py Executable file
View File

@ -0,0 +1,53 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2021 Intel Corporation
import os
import sys
import shutil
from os.path import abspath, dirname, join
def fixup_library_renames(contents):
"""since library directory names have dropped the 'librte_' prefix,
add those prefixes back in for patches than need it"""
modified = False
# first get all the DPDK libs to build up replacement list
# stored in function attribute between calls
try:
libdirs = fixup_library_renames.libdirs
except AttributeError:
dpdk_libdir = abspath(join(dirname(sys.argv[0]), '..', 'lib'))
for root, dirs, files in os.walk(dpdk_libdir):
fixup_library_renames.libdirs = dirs
libdirs = dirs
break
for i in range(len(contents)):
# skip over any lines which don't have lib in it
if not "lib/" in contents[i]:
continue
for d in libdirs:
if f'lib/{d}' in contents[i]:
modified = True
contents[i] = contents[i].replace(f'lib/{d}', f'lib/librte_{d}')
return modified
def main():
"takes list of patches off argv and processes each"
for patch in sys.argv[1:]:
modified = False
with open(patch) as f:
contents = f.readlines()
modified |= fixup_library_renames(contents)
# other functions to change the patch go here
if not modified:
continue
shutil.copyfile(f'{patch}', f'{patch}.bak')
with open(patch, 'w') as f:
f.writelines(contents)
if __name__ == "__main__":
main()