mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00

In my test environments (Fedora 35 and Debian 10.10 on AMD 2970WX), running the convert-variable-renames.py rename script was resulting in empty files instead of updated ones. From inspection, the new files are never flushed/closed before moving them into place, which seems inherently racy. Adding an explicit close to flush the modified contents out before moving into place fixes the issue for me. (From OE-Core rev: 187ac1ea0a701a5ba9ec92f6aa32f2a67600a584) Signed-off-by: Scott Murray <scott.murray@konsulko.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
117 lines
4.0 KiB
Python
Executable File
117 lines
4.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Conversion script to rename variables to versions with improved terminology.
|
|
# Also highlights potentially problematic langage and removed variables.
|
|
#
|
|
# Copyright (C) 2021 Richard Purdie
|
|
# Copyright (C) 2022 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
|
|
import re
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
import shutil
|
|
import mimetypes
|
|
|
|
if len(sys.argv) < 2:
|
|
print("Please specify a directory to run the conversion script against.")
|
|
sys.exit(1)
|
|
|
|
renames = {
|
|
"BB_ENV_WHITELIST" : "BB_ENV_PASSTHROUGH",
|
|
"BB_ENV_EXTRAWHITE" : "BB_ENV_PASSTHROUGH_ADDITIONS",
|
|
"BB_HASHCONFIG_WHITELIST" : "BB_HASHCONFIG_IGNORE_VARS",
|
|
"BB_SETSCENE_ENFORCE_WHITELIST" : "BB_SETSCENE_ENFORCE_IGNORE_TASKS",
|
|
"BB_HASHBASE_WHITELIST" : "BB_BASEHASH_IGNORE_VARS",
|
|
"BB_HASHTASK_WHITELIST" : "BB_TASKHASH_IGNORE_TASKS",
|
|
"CVE_CHECK_PN_WHITELIST" : "CVE_CHECK_SKIP_RECIPE",
|
|
"CVE_CHECK_WHITELIST" : "CVE_CHECK_IGNORE",
|
|
"MULTI_PROVIDER_WHITELIST" : "BB_MULTI_PROVIDER_ALLOWED",
|
|
"PNBLACKLIST" : "SKIP_RECIPE",
|
|
"SDK_LOCAL_CONF_BLACKLIST" : "ESDK_LOCALCONF_REMOVE",
|
|
"SDK_LOCAL_CONF_WHITELIST" : "ESDK_LOCALCONF_ALLOW",
|
|
"SDK_INHERIT_BLACKLIST" : "ESDK_CLASS_INHERIT_DISABLE",
|
|
"SSTATE_DUPWHITELIST" : "SSTATE_ALLOW_OVERLAP_FILES",
|
|
"SYSROOT_DIRS_BLACKLIST" : "SYSROOT_DIRS_IGNORE",
|
|
"UNKNOWN_CONFIGURE_WHITELIST" : "UNKNOWN_CONFIGURE_OPT_IGNORE",
|
|
"ICECC_USER_CLASS_BL" : "ICECC_CLASS_DISABLE",
|
|
"ICECC_SYSTEM_CLASS_BL" : "ICECC_CLASS_DISABLE",
|
|
"ICECC_USER_PACKAGE_WL" : "ICECC_RECIPE_ENABLE",
|
|
"ICECC_USER_PACKAGE_BL" : "ICECC_RECIPE_DISABLE",
|
|
"ICECC_SYSTEM_PACKAGE_BL" : "ICECC_RECIPE_DISABLE",
|
|
"LICENSE_FLAGS_WHITELIST" : "LICENSE_FLAGS_ACCEPTED",
|
|
}
|
|
|
|
removed_list = [
|
|
"BB_STAMP_WHITELIST",
|
|
"BB_STAMP_POLICY",
|
|
"INHERIT_BLACKLIST",
|
|
"TUNEABI_WHITELIST",
|
|
]
|
|
|
|
context_check_list = [
|
|
"blacklist",
|
|
"whitelist",
|
|
"abort",
|
|
]
|
|
|
|
def processfile(fn):
|
|
|
|
print("processing file '%s'" % fn)
|
|
try:
|
|
fh, abs_path = tempfile.mkstemp()
|
|
modified = False
|
|
with os.fdopen(fh, 'w') as new_file:
|
|
with open(fn, "r") as old_file:
|
|
lineno = 0
|
|
for line in old_file:
|
|
lineno += 1
|
|
if not line or "BB_RENAMED_VARIABLE" in line:
|
|
continue
|
|
# Do the renames
|
|
for old_name, new_name in renames.items():
|
|
if old_name in line:
|
|
line = line.replace(old_name, new_name)
|
|
modified = True
|
|
# Find removed names
|
|
for removed_name in removed_list:
|
|
if removed_name in line:
|
|
print("%s needs further work at line %s because has been deprecated" % (fn, lineno, remove_name))
|
|
for check_word in context_check_list:
|
|
if re.search(check_word, line, re.IGNORECASE):
|
|
print("%s needs further work at line %s since it contains %s"% (fn, lineno, check_word))
|
|
new_file.write(line)
|
|
new_file.close()
|
|
if modified:
|
|
print("*** Modified file '%s'" % (fn))
|
|
shutil.copymode(fn, abs_path)
|
|
os.remove(fn)
|
|
shutil.move(abs_path, fn)
|
|
except UnicodeDecodeError:
|
|
pass
|
|
|
|
ourname = os.path.basename(sys.argv[0])
|
|
ourversion = "0.1"
|
|
|
|
if os.path.isfile(sys.argv[1]):
|
|
processfile(sys.argv[1])
|
|
sys.exit(0)
|
|
|
|
for targetdir in sys.argv[1:]:
|
|
print("processing directory '%s'" % targetdir)
|
|
for root, dirs, files in os.walk(targetdir):
|
|
for name in files:
|
|
if name == ourname:
|
|
continue
|
|
fn = os.path.join(root, name)
|
|
if os.path.islink(fn):
|
|
continue
|
|
if "ChangeLog" in fn or "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff") or fn.endswith(".orig"):
|
|
continue
|
|
processfile(fn)
|
|
|
|
print("All files processed with version %s" % ourversion)
|