[dpdk-dev] [PATCH v2 15/16] devtools: add script to ease backport of renamed files

Bruce Richardson bruce.richardson at intel.com
Tue Apr 20 12:22:31 CEST 2021


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 at intel.com>
---
 devtools/update_patches.py | 53 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100755 devtools/update_patches.py

diff --git a/devtools/update_patches.py b/devtools/update_patches.py
new file mode 100755
index 0000000000..0cff215a96
--- /dev/null
+++ b/devtools/update_patches.py
@@ -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()
-- 
2.27.0



More information about the dev mailing list