aboutsummaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-12-15 11:04:34 +1300
committerPaul Eggleton <paul.eggleton@linux.intel.com>2018-02-26 14:45:07 +1300
commit14916aba59e4784b073b99c02db927e1c86e8d65 (patch)
treeaa2bd56e8546d621ab068920c5251d8afb3978be /meta
parentb30153a15715a83c0f9a7d7d1883a15404992a19 (diff)
downloadopenembedded-core-contrib-14916aba59e4784b073b99c02db927e1c86e8d65.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. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Diffstat (limited to 'meta')
-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)
raise
return file
+
+def is_path_parent(possible_parent, *paths):
+ """
+ Return True if a path is the parent of another, False otherwise.
+ Multiple paths to test can be specified in which case all
+ specified test paths must be under the parent in order to
+ return True.
+ """
+ def abs_path_trailing(pth):
+ pth_abs = os.path.abspath(pth)
+ if not pth_abs.endswith(os.sep):
+ pth_abs += os.sep
+ return pth_abs
+
+ possible_parent_abs = abs_path_trailing(possible_parent)
+ if not paths:
+ return False
+ for path in paths:
+ path_abs = abs_path_trailing(path)
+ if not path_abs.startswith(possible_parent_abs):
+ return False
+ return True