summaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2018-02-26 14:49:54 +1300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-03-01 22:13:56 +0000
commit9b49883f2f6325ea8b68cf676f5e2339fa9117e1 (patch)
tree6ea3e75d1625789eaddedb934a7ab0daf0f463a2 /meta/lib
parent98aff12d9cd104d39cdff815ee0c5194efa438f6 (diff)
downloadpoky-9b49883f2f6325ea8b68cf676f5e2339fa9117e1.tar.gz
lib/oe/path: implement is_path_parent()
In a few places we have checks to see path B is the parent of path A, by adding / to the end of the path B and then seeing if path A starts with the suffixed path B. Unfortunately there are two potential flaws: (1) path A needs to be suffixed with / as well or the directory itself won't match (semantics perhaps, but in a lot of scenarios returning True is correct); (2) you need to run os.path.abspath() on both paths first or you will wrongly return False for some relative paths where you should return True. Let's solve this once and for all by writing a function that takes care of these and put it in oe.path. (From OE-Core rev: dd3d4b0367272a5826a9a51afa26f426dd003e5d) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r--meta/lib/oe/path.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py
index 1ea03d5d56..76c58fa760 100644
--- a/meta/lib/oe/path.py
+++ b/meta/lib/oe/path.py
@@ -237,3 +237,25 @@ def realpath(file, root, use_physdir = True, loop_cnt = 100, assume_dir = False)
237 raise 237 raise
238 238
239 return file 239 return file
240
241def is_path_parent(possible_parent, *paths):
242 """
243 Return True if a path is the parent of another, False otherwise.
244 Multiple paths to test can be specified in which case all
245 specified test paths must be under the parent in order to
246 return True.
247 """
248 def abs_path_trailing(pth):
249 pth_abs = os.path.abspath(pth)
250 if not pth_abs.endswith(os.sep):
251 pth_abs += os.sep
252 return pth_abs
253
254 possible_parent_abs = abs_path_trailing(possible_parent)
255 if not paths:
256 return False
257 for path in paths:
258 path_abs = abs_path_trailing(path)
259 if not path_abs.startswith(possible_parent_abs):
260 return False
261 return True