On Thu, Mar 15, 2018 at 3:22 PM, Michał Górny <mgo...@gentoo.org> 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 21904edca..16c246b11 100644
> --- a/pym/portage/dbapi/vartree.py
> +++ b/pym/portage/dbapi/vartree.py
> @@ -3692,19 +3692,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:]
>

Maybe consider:

pattern = pattern[1:] if pattern.startswith('-') else pattern

I'm not super keen on this pattern in python, but it seems doable here.


>                         # 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.16.2
>
>
>

Reply via email to