On 05/21/2016 11:56 PM, Michał Górny wrote: > 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, >
In order to implement this with pre-compiled patterns, we can use a separate regular expression to represent all of the exclusions. -- Thanks, Zac