Re: [PATCH 5 of 7] fileset: roughly adjust weights of functions

2018-08-03 Thread Augie Fackler


> On Aug 3, 2018, at 11:01, Yuya Nishihara  wrote:
> 
> # HG changeset patch
> # User Yuya Nishihara 
> # Date 1532227649 -32400
> #  Sun Jul 22 11:47:29 2018 +0900
> # Node ID 1ec115b2c5525f0507ff7c4dc2019b57ae391911
> # Parent  6c9246c08523616914af131700126cfc408114f7
> fileset: roughly adjust weights of functions
> 
> ... in order to move status predicates far away from basic patterns. I don't
> know if each weight is appropriate, but it should be good enough as a start.

Maybe it'd be worth having constants in the fileset module for roughly what we 
think typical weights are? eg

_WEIGHT_STATUS = 10 # loads dirstate or stats working copy file
_WEIGHT_STATUS_THOROUGH = 50 # might have to enumerate ignored files/dirs
_WEIGHT_READ_CONTENTS = 30 # reads the contents of a file
_WEIGHT_CHECK_FILENAME=0.5 # only examines a filename

(I see you have a comment for that, but maybe even using named constants would 
be better?)

Love the series, btw, good stuff.
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


[PATCH 5 of 7] fileset: roughly adjust weights of functions

2018-08-03 Thread Yuya Nishihara
# HG changeset patch
# User Yuya Nishihara 
# Date 1532227649 -32400
#  Sun Jul 22 11:47:29 2018 +0900
# Node ID 1ec115b2c5525f0507ff7c4dc2019b57ae391911
# Parent  6c9246c08523616914af131700126cfc408114f7
fileset: roughly adjust weights of functions

... in order to move status predicates far away from basic patterns. I don't
know if each weight is appropriate, but it should be good enough as a start.

diff --git a/mercurial/fileset.py b/mercurial/fileset.py
--- a/mercurial/fileset.py
+++ b/mercurial/fileset.py
@@ -88,7 +88,7 @@ symbols = filesetlang.symbols
 
 predicate = registrar.filesetpredicate()
 
-@predicate('modified()', callstatus=True)
+@predicate('modified()', callstatus=True, weight=10)
 def modified(mctx, x):
 """File that is modified according to :hg:`status`.
 """
@@ -97,7 +97,7 @@ def modified(mctx, x):
 s = set(mctx.status().modified)
 return mctx.predicate(s.__contains__, predrepr='modified')
 
-@predicate('added()', callstatus=True)
+@predicate('added()', callstatus=True, weight=10)
 def added(mctx, x):
 """File that is added according to :hg:`status`.
 """
@@ -106,7 +106,7 @@ def added(mctx, x):
 s = set(mctx.status().added)
 return mctx.predicate(s.__contains__, predrepr='added')
 
-@predicate('removed()', callstatus=True)
+@predicate('removed()', callstatus=True, weight=10)
 def removed(mctx, x):
 """File that is removed according to :hg:`status`.
 """
@@ -115,7 +115,7 @@ def removed(mctx, x):
 s = set(mctx.status().removed)
 return mctx.predicate(s.__contains__, predrepr='removed')
 
-@predicate('deleted()', callstatus=True)
+@predicate('deleted()', callstatus=True, weight=10)
 def deleted(mctx, x):
 """Alias for ``missing()``.
 """
@@ -124,7 +124,7 @@ def deleted(mctx, x):
 s = set(mctx.status().deleted)
 return mctx.predicate(s.__contains__, predrepr='deleted')
 
-@predicate('missing()', callstatus=True)
+@predicate('missing()', callstatus=True, weight=10)
 def missing(mctx, x):
 """File that is missing according to :hg:`status`.
 """
@@ -133,7 +133,7 @@ def missing(mctx, x):
 s = set(mctx.status().deleted)
 return mctx.predicate(s.__contains__, predrepr='deleted')
 
-@predicate('unknown()', callstatus=True)
+@predicate('unknown()', callstatus=True, weight=50)
 def unknown(mctx, x):
 """File that is unknown according to :hg:`status`."""
 # i18n: "unknown" is a keyword
@@ -141,7 +141,7 @@ def unknown(mctx, x):
 s = set(mctx.status().unknown)
 return mctx.predicate(s.__contains__, predrepr='unknown')
 
-@predicate('ignored()', callstatus=True)
+@predicate('ignored()', callstatus=True, weight=50)
 def ignored(mctx, x):
 """File that is ignored according to :hg:`status`."""
 # i18n: "ignored" is a keyword
@@ -149,7 +149,7 @@ def ignored(mctx, x):
 s = set(mctx.status().ignored)
 return mctx.predicate(s.__contains__, predrepr='ignored')
 
-@predicate('clean()', callstatus=True)
+@predicate('clean()', callstatus=True, weight=10)
 def clean(mctx, x):
 """File that is clean according to :hg:`status`.
 """
@@ -165,7 +165,7 @@ def tracked(mctx, x):
 getargs(x, 0, 0, _("tracked takes no arguments"))
 return mctx.predicate(mctx.ctx.__contains__, predrepr='tracked')
 
-@predicate('binary()')
+@predicate('binary()', weight=30)
 def binary(mctx, x):
 """File that appears to be binary (contains NUL bytes).
 """
@@ -192,7 +192,7 @@ def symlink(mctx, x):
 ctx = mctx.ctx
 return mctx.predicate(lambda f: ctx.flags(f) == 'l', predrepr='symlink')
 
-@predicate('resolved()')
+@predicate('resolved()', weight=10)
 def resolved(mctx, x):
 """File that is marked resolved according to :hg:`resolve -l`.
 """
@@ -204,7 +204,7 @@ def resolved(mctx, x):
 return mctx.predicate(lambda f: f in ms and ms[f] == 'r',
   predrepr='resolved')
 
-@predicate('unresolved()')
+@predicate('unresolved()', weight=10)
 def unresolved(mctx, x):
 """File that is marked unresolved according to :hg:`resolve -l`.
 """
@@ -216,7 +216,7 @@ def unresolved(mctx, x):
 return mctx.predicate(lambda f: f in ms and ms[f] == 'u',
   predrepr='unresolved')
 
-@predicate('hgignore()')
+@predicate('hgignore()', weight=10)
 def hgignore(mctx, x):
 """File that matches the active .hgignore pattern.
 """
@@ -224,7 +224,7 @@ def hgignore(mctx, x):
 getargs(x, 0, 0, _("hgignore takes no arguments"))
 return mctx.ctx.repo().dirstate._ignore
 
-@predicate('portable()')
+@predicate('portable()', weight=0.5)
 def portable(mctx, x):
 """File that has a portable name. (This doesn't include filenames with case
 collisions.)
@@ -234,7 +234,7 @@ def portable(mctx, x):
 return mctx.predicate(lambda f: util.checkwinfilename(f) is None,
   predrepr='portable')
 
-@predicate('grep(regex)')
+@predicate('grep(regex)', weight=30)
 def grep(mctx, x):
 """File contains the given regular