On Thu, Jul 6, 2017 at 4:36 PM, Gregory Szorc <gregory.sz...@gmail.com> wrote:
> # HG changeset patch
> # User Gregory Szorc <gregory.sz...@gmail.com>
> # Date 1499382480 25200
> #      Thu Jul 06 16:08:00 2017 -0700
> # Node ID 7dd8166a473cd19d6c9a1c6aa0d37f03f223a726
> # Parent  766f7cb3a49bde4dc740870d6e34848eb64743a6
> sparse: move matchers into core
>
> The sparse extension contains some matcher types that are
> generic and can exist in core.
>
> As part of the move, the classes now inherit from basematcher.
> always(), files(), and isexact() have been dropped because
> they match the default implementations in basematcher. __repr__
> has been implemented.
>
> Note that this hashing of matchers is somewhat hacky. It is an
> optimization that results in better performance. We can and
> should think about formalizing the API across all matchers. This
> is why matchers are initially being added to sparse.py instead
> of match.py. Once they are stable, we can move them to join their
> siblings in match.py.
>
> diff --git a/hgext/sparse.py b/hgext/sparse.py
> --- a/hgext/sparse.py
> +++ b/hgext/sparse.py
> @@ -870,100 +870,3 @@ def _verbose_output(ui, opts, profilecou
>                           dropped)
>              fm.condwrite(ui.verbose, 'files_conflicting',
>                           'Files conflicting: %d\n', lookup)
> -
> -class forceincludematcher(object):
> -    """A matcher that returns true for any of the forced includes before 
> testing
> -    against the actual matcher."""
> -    def __init__(self, matcher, includes):
> -        self._matcher = matcher
> -        self._includes = includes
> -
> -    def __call__(self, value):
> -        return value in self._includes or self._matcher(value)
> -
> -    def always(self):
> -        return False
> -
> -    def files(self):
> -        return []
> -
> -    def isexact(self):
> -        return False
> -
> -    def anypats(self):
> -        return True
> -
> -    def prefix(self):
> -        return False
> -
> -    def hash(self):
> -        sha1 = hashlib.sha1()
> -        sha1.update(_hashmatcher(self._matcher))
> -        for include in sorted(self._includes):
> -            sha1.update(include + '\0')
> -        return sha1.hexdigest()
> diff --git a/mercurial/sparse.py b/mercurial/sparse.py
> --- a/mercurial/sparse.py
> +++ b/mercurial/sparse.py
> @@ -193,3 +195,83 @@ def addtemporaryincludes(repo, additiona
>      for i in additional:
>          includes.add(i)
>      writetemporaryincludes(repo, includes)
> +
> +class forceincludematcher(matchmod.basematcher):
> +    """A matcher that returns true for any of the forced includes before 
> testing
> +    against the actual matcher."""
> +    def __init__(self, matcher, includes):
> +        self._matcher = matcher
> +        self._includes = includes
> +
> +    def __repr__(self):
> +        return '<forceincludematcher matcher=%r includes=%r>' % (
> +            self._matcher, self._includes)

self._includes used to be wrapped in sorted(). I don't know how
important that is, but seems safer to leave alone. It should at least
not change as part of a move.

> +
> +    def __call__(self, value):
> +        return value in self._includes or self._matcher(value)
> +
> +    def anypats(self):
> +        return True
> +
> +    def prefix(self):
> +        return False
> +
> +    def hash(self):
> +        sha1 = hashlib.sha1()
> +        sha1.update(hashmatcher(self._matcher))
> +        for include in sorted(self._includes):
> +            sha1.update(include + '\0')
> +        return sha1.hexdigest()

I don't see a reason to keep the hash() functions. If we just remove
them, I'd be happy to move these matchers into match.py.

I can send the patch I had to replace hash() by __repr__() and you can
queue them quickly if you agree with them? Then move the matchers
straight into match.py. Or, if you prefer, I can queue this and we can
move them into match.py in a followup (it just seems cleaner to not
transit in sparse.py).
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to