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

Reply via email to