mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-08-08 08:30:47 -09:00
utils/getdeveloperlib.py: use relative paths for files
Using absolute paths within getdeveloperlib isn't very sensible, it
makes a lot more sense to handle everything as relative paths from the
top-level Buildroot source directory.
parse_developers() is changed to no longer take the base path as
argument: it is automatically calculated based on the location of
utils/getdeveloperlib.py. Then, the rest of the logic is adjusted to
use relative paths, and prepend them with the base "brpath" when
needed.
This commit allows pkg-stats to report correct developers information
even when executed from an out of tree directory.
Before this patch:
$ ~/buildroot/support/scripts/pkg-stats -p ipmitool --json out.json
$ cat out.json | jq '.packages.ipmitool.developers'
[]
$ cat out.json | jq '.defconfigs.stm32f469_disco'
{
"name": "stm32f469_disco",
"path": "configs/stm32f469_disco_defconfig",
"developers": []
}
After this patch:
$ ~/buildroot/support/scripts/pkg-stats -p ipmitool --json out.json
$ cat out.json | jq '.packages.ipmitool.developers'
[
"Floris Bos <bos@je-eigen-domein.nl>",
"Heiko Thiery <heiko.thiery@gmail.com>"
]
$ cat out.json | jq '.defconfigs.stm32f469_disco'
{
"name": "stm32f469_disco",
"path": "configs/stm32f469_disco_defconfig",
"developers": [
"Christophe Priouzeau <christophe.priouzeau@st.com>"
]
}
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Tested-by: Heiko Thiery <heiko.thiery@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
@@ -1079,7 +1079,7 @@ def __main__():
|
|||||||
print("Build package list ...")
|
print("Build package list ...")
|
||||||
packages = get_pkglist(args.npackages, package_list)
|
packages = get_pkglist(args.npackages, package_list)
|
||||||
print("Getting developers ...")
|
print("Getting developers ...")
|
||||||
developers = parse_developers(brpath)
|
developers = parse_developers()
|
||||||
print("Build defconfig list ...")
|
print("Build defconfig list ...")
|
||||||
defconfigs = get_defconfig_list()
|
defconfigs = get_defconfig_list()
|
||||||
for d in defconfigs:
|
for d in defconfigs:
|
||||||
|
|||||||
@@ -45,10 +45,6 @@ def __main__():
|
|||||||
print("No action specified")
|
print("No action specified")
|
||||||
return
|
return
|
||||||
|
|
||||||
# getdeveloperlib expects to be executed from the toplevel buildroot
|
|
||||||
# directory, which is one level up from this script
|
|
||||||
os.chdir(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
|
|
||||||
|
|
||||||
devs = getdeveloperlib.parse_developers()
|
devs = getdeveloperlib.parse_developers()
|
||||||
if devs is None:
|
if devs is None:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
@@ -75,7 +71,6 @@ def __main__():
|
|||||||
|
|
||||||
# Handle the files action
|
# Handle the files action
|
||||||
if args.files is not None:
|
if args.files is not None:
|
||||||
args.files = [os.path.abspath(f) for f in args.files]
|
|
||||||
for dev in devs:
|
for dev in devs:
|
||||||
for f in args.files:
|
for f in args.files:
|
||||||
if dev.hasfile(f):
|
if dev.hasfile(f):
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import subprocess
|
|||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
brpath = os.path.normpath(os.path.join(os.path.dirname(__file__), ".."))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Patch parsing functions
|
# Patch parsing functions
|
||||||
#
|
#
|
||||||
@@ -94,14 +96,14 @@ def get_all_test_cases(suite):
|
|||||||
yield (suite.__module__, suite.__class__.__name__)
|
yield (suite.__module__, suite.__class__.__name__)
|
||||||
|
|
||||||
|
|
||||||
def list_unittests(path):
|
def list_unittests():
|
||||||
"""Use the unittest module to retreive all test cases from a given
|
"""Use the unittest module to retreive all test cases from a given
|
||||||
directory"""
|
directory"""
|
||||||
loader = unittest.TestLoader()
|
loader = unittest.TestLoader()
|
||||||
suite = loader.discover(path)
|
suite = loader.discover(os.path.join(brpath, "support", "testing"))
|
||||||
tests = {}
|
tests = {}
|
||||||
for module, test in get_all_test_cases(suite):
|
for module, test in get_all_test_cases(suite):
|
||||||
module_path = os.path.join(path, *module.split('.'))
|
module_path = os.path.join("support", "testing", *module.split('.'))
|
||||||
tests.setdefault(module_path, []).append('%s.%s' % (module, test))
|
tests.setdefault(module_path, []).append('%s.%s' % (module, test))
|
||||||
return tests
|
return tests
|
||||||
|
|
||||||
@@ -124,9 +126,7 @@ class Developer:
|
|||||||
self.defconfigs = parse_developer_defconfigs(files)
|
self.defconfigs = parse_developer_defconfigs(files)
|
||||||
|
|
||||||
def hasfile(self, f):
|
def hasfile(self, f):
|
||||||
f = os.path.abspath(f)
|
|
||||||
for fs in self.files:
|
for fs in self.files:
|
||||||
fs = os.path.abspath(fs)
|
|
||||||
if f.startswith(fs):
|
if f.startswith(fs):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
@@ -158,7 +158,7 @@ def parse_developer_packages(fnames):
|
|||||||
patterns, and return a list of those packages."""
|
patterns, and return a list of those packages."""
|
||||||
packages = set()
|
packages = set()
|
||||||
for fname in fnames:
|
for fname in fnames:
|
||||||
for root, dirs, files in os.walk(fname):
|
for root, dirs, files in os.walk(os.path.join(brpath, fname)):
|
||||||
for f in files:
|
for f in files:
|
||||||
path = os.path.join(root, f)
|
path = os.path.join(root, f)
|
||||||
if fname_get_package_infra(path):
|
if fname_get_package_infra(path):
|
||||||
@@ -223,7 +223,7 @@ def parse_developer_runtime_tests(fnames):
|
|||||||
# List all files recursively
|
# List all files recursively
|
||||||
for fname in fnames:
|
for fname in fnames:
|
||||||
if os.path.isdir(fname):
|
if os.path.isdir(fname):
|
||||||
for root, _dirs, files in os.walk(fname):
|
for root, _dirs, files in os.walk(os.path.join(brpath, fname)):
|
||||||
all_files += [os.path.join(root, f) for f in files]
|
all_files += [os.path.join(root, f) for f in files]
|
||||||
else:
|
else:
|
||||||
all_files.append(fname)
|
all_files.append(fname)
|
||||||
@@ -237,15 +237,13 @@ def parse_developer_runtime_tests(fnames):
|
|||||||
return runtimes
|
return runtimes
|
||||||
|
|
||||||
|
|
||||||
def parse_developers(basepath=None):
|
def parse_developers():
|
||||||
"""Parse the DEVELOPERS file and return a list of Developer objects."""
|
"""Parse the DEVELOPERS file and return a list of Developer objects."""
|
||||||
developers = []
|
developers = []
|
||||||
linen = 0
|
linen = 0
|
||||||
if basepath is None:
|
|
||||||
basepath = os.getcwd()
|
|
||||||
global unittests
|
global unittests
|
||||||
unittests = list_unittests(os.path.join(basepath, 'support/testing'))
|
unittests = list_unittests()
|
||||||
with open(os.path.join(basepath, "DEVELOPERS"), "r") as f:
|
with open(os.path.join(brpath, "DEVELOPERS"), "r") as f:
|
||||||
files = []
|
files = []
|
||||||
name = None
|
name = None
|
||||||
for line in f:
|
for line in f:
|
||||||
@@ -259,11 +257,11 @@ def parse_developers(basepath=None):
|
|||||||
name = line[2:].strip()
|
name = line[2:].strip()
|
||||||
elif line.startswith("F:"):
|
elif line.startswith("F:"):
|
||||||
fname = line[2:].strip()
|
fname = line[2:].strip()
|
||||||
dev_files = glob.glob(os.path.join(basepath, fname))
|
dev_files = glob.glob(os.path.join(brpath, fname))
|
||||||
if len(dev_files) == 0:
|
if len(dev_files) == 0:
|
||||||
print("WARNING: '%s' doesn't match any file" % fname,
|
print("WARNING: '%s' doesn't match any file" % fname,
|
||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
files += dev_files
|
files += [os.path.relpath(f, brpath) for f in dev_files]
|
||||||
elif line == "":
|
elif line == "":
|
||||||
if not name:
|
if not name:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user