Allow INSTALL_MASK patterns to start with '-' to indicate that a specific match is to be excluded from being masked. In this case, the last matching pattern determines whether the file is actually filtered out or kept. --- pym/portage/dbapi/vartree.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 8e5ac43..d02d850 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -3690,19 +3690,21 @@ class dblink(object): def _is_install_masked(self, relative_path): ret = False for pattern in self.settings.install_mask: + # if pattern starts with -, possibly exclude this path + pat_res = not pattern.startswith('-') + if not pat_res: + pattern = pattern[1:] # absolute path pattern if pattern.startswith('/'): # match either exact path or one of parent dirs # the latter is done via matching pattern/* if (fnmatch.fnmatch(relative_path, pattern[1:]) or fnmatch.fnmatch(relative_path, pattern[1:] + '/*')): - ret = True - break + ret = pat_res # filename else: if fnmatch.fnmatch(os.path.basename(relative_path), pattern): - ret = True - break + ret = pat_res return ret def treewalk(self, srcroot, destroot, inforoot, myebuild, cleanup=0, -- 2.8.3