mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
oe.path: add which_wild function
This is a function much like shutil.which or bb.utils.which, retaining shutil.which-like function semantics, bb.utils.which's support for returning available candidates for signatures, and most importantly, supports wildcards, returning only the first occurrance of each found pathname in the search path. (From OE-Core rev: ca276fe139129eec383d77768ba91b808c462b04) Signed-off-by: Christopher Larson <chris_larson@mentor.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
7cb125d7ee
commit
b0527c08d4
|
@ -259,3 +259,37 @@ def is_path_parent(possible_parent, *paths):
|
|||
if not path_abs.startswith(possible_parent_abs):
|
||||
return False
|
||||
return True
|
||||
|
||||
def which_wild(pathname, path=None, mode=os.F_OK, *, reverse=False, candidates=False):
|
||||
"""Search a search path for pathname, supporting wildcards.
|
||||
|
||||
Return all paths in the specific search path matching the wildcard pattern
|
||||
in pathname, returning only the first encountered for each file. If
|
||||
candidates is True, information on all potential candidate paths are
|
||||
included.
|
||||
"""
|
||||
paths = (path or os.environ.get('PATH', os.defpath)).split(':')
|
||||
if reverse:
|
||||
paths.reverse()
|
||||
|
||||
seen, files = set(), []
|
||||
for index, element in enumerate(paths):
|
||||
if not os.path.isabs(element):
|
||||
element = os.path.abspath(element)
|
||||
|
||||
candidate = os.path.join(element, pathname)
|
||||
globbed = glob.glob(candidate)
|
||||
if globbed:
|
||||
for found_path in sorted(globbed):
|
||||
if not os.access(found_path, mode):
|
||||
continue
|
||||
rel = os.path.relpath(found_path, element)
|
||||
if rel not in seen:
|
||||
seen.add(rel)
|
||||
if candidates:
|
||||
files.append((found_path, [os.path.join(p, rel) for p in paths[:index+1]]))
|
||||
else:
|
||||
files.append(found_path)
|
||||
|
||||
return files
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user