lib/oe/path: Add canonicalize()

oe.path.canonicalize() is used to canonicalize paths (i.e., remove
symbolic links and "..", and make them absolute). It takes a string
with paths separated by commas, and returns the canonicalized path in
the same format.

(From OE-Core rev: 282b19c0e27488ec119f00fb2542ffdc1af54e2a)

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Peter Kjellerstedt 2020-12-09 18:05:07 +01:00 committed by Richard Purdie
parent e90cea97d2
commit c37aed34af

View File

@ -320,3 +320,24 @@ def which_wild(pathname, path=None, mode=os.F_OK, *, reverse=False, candidates=F
return files
def canonicalize(paths, sep=','):
"""Given a string with paths (separated by commas by default), expand
each path using os.path.realpath() and return the resulting paths as a
string (separated using the same separator a the original string).
"""
# Ignore paths containing "$" as they are assumed to be unexpanded bitbake
# variables. Normally they would be ignored, e.g., when passing the paths
# through the shell they would expand to empty strings. However, when they
# are passed through os.path.realpath(), it will cause them to be prefixed
# with the absolute path to the current directory and thus not be empty
# anymore.
#
# Also maintain trailing slashes, as the paths may actually be used as
# prefixes in sting compares later on, where the slashes then are important.
canonical_paths = []
for path in (paths or '').split(sep):
if '$' not in path:
trailing_slash = path.endswith('/') and '/' or ''
canonical_paths.append(os.path.realpath(path) + trailing_slash)
return sep.join(canonical_paths)