Mercurial > hg-stable
annotate mercurial/fileset.py @ 40479:197f092b2cd9 stable 4.8.2
server: always close http socket if responding with an error (issue6033)
It's possible for hgweb to respond _very_ early with an error if we're
catching certain types of errors. When we do, we need to tell the client
the socket is toast when there's a POST involved because otherwise there
can be lingering POST data on the socket that will confuse any future
requests on the socket. This manifested as a flaky failure on Linux in an
lfs extension test and a reliable failure on FreeBSD. With this patch
applied, test-lfs-serve-access.t now passes for me on FreeBSD.
Differential Revision: https://phab.mercurial-scm.org/D5498
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Sun, 06 Jan 2019 14:58:54 -0500 |
parents | aebfc4c5c855 |
children | 1db5ae4b0dda |
rev | line source |
---|---|
14511
30506b894359
filesets: introduce basic fileset expression parser
Matt Mackall <mpm@selenic.com>
parents:
14509
diff
changeset
|
1 # fileset.py - file set queries for mercurial |
11275 | 2 # |
3 # Copyright 2010 Matt Mackall <mpm@selenic.com> | |
4 # | |
5 # This software may be used and distributed according to the terms of the | |
6 # GNU General Public License version 2 or any later version. | |
7 | |
25938
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
8 from __future__ import absolute_import |
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
9 |
38684
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
10 import errno |
20034
1e5b38a919dd
cleanup: move stdlib imports to their own import statement
Augie Fackler <raf@durin42.com>
parents:
19470
diff
changeset
|
11 import re |
25938
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
12 |
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
13 from .i18n import _ |
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
14 from . import ( |
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
15 error, |
38845
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
16 filesetlang, |
35739
9eb5c400f488
fileset: move import of match module to top
Yuya Nishihara <yuya@tcha.org>
parents:
35692
diff
changeset
|
17 match as matchmod, |
25938
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
18 merge, |
32556
1fb0a85fb20e
py3: use pycompat.bytestr so that we don't get ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32331
diff
changeset
|
19 pycompat, |
28448
7108834c76a2
fileset: replace predicate by filesetpredicate of registrar (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28447
diff
changeset
|
20 registrar, |
31203
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
21 scmutil, |
25938
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
22 util, |
e194ada8d45f
fileset: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25815
diff
changeset
|
23 ) |
37087
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36535
diff
changeset
|
24 from .utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36535
diff
changeset
|
25 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36535
diff
changeset
|
26 ) |
11275 | 27 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
28 # common weight constants |
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
29 _WEIGHT_CHECK_FILENAME = filesetlang.WEIGHT_CHECK_FILENAME |
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
30 _WEIGHT_READ_CONTENTS = filesetlang.WEIGHT_READ_CONTENTS |
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
31 _WEIGHT_STATUS = filesetlang.WEIGHT_STATUS |
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
32 _WEIGHT_STATUS_THOROUGH = filesetlang.WEIGHT_STATUS_THOROUGH |
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
33 |
38845
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
34 # helpers for processing parsed tree |
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
35 getsymbol = filesetlang.getsymbol |
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
36 getstring = filesetlang.getstring |
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
37 _getkindpat = filesetlang.getkindpat |
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
38 getpattern = filesetlang.getpattern |
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
39 getargs = filesetlang.getargs |
38599
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
40 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
41 def getmatch(mctx, x): |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
42 if not x: |
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
43 raise error.ParseError(_("missing argument")) |
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
44 return methods[x[0]](mctx, *x[1:]) |
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
45 |
38918
e79a69af1593
fileset: insert hints where status should be computed
Yuya Nishihara <yuya@tcha.org>
parents:
38917
diff
changeset
|
46 def getmatchwithstatus(mctx, x, hint): |
38919
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
47 keys = set(getstring(hint, 'status hint must be a string').split()) |
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
48 return getmatch(mctx.withstatus(keys), x) |
38918
e79a69af1593
fileset: insert hints where status should be computed
Yuya Nishihara <yuya@tcha.org>
parents:
38917
diff
changeset
|
49 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
50 def stringmatch(mctx, x): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
51 return mctx.matcher([x]) |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
52 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
53 def kindpatmatch(mctx, x, y): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
54 return stringmatch(mctx, _getkindpat(x, y, matchmod.allpatternkinds, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
55 _("pattern must be a string"))) |
35741
73432eee0ac4
fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents:
35739
diff
changeset
|
56 |
38904
899b4c74209c
fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org>
parents:
38902
diff
changeset
|
57 def patternsmatch(mctx, *xs): |
899b4c74209c
fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org>
parents:
38902
diff
changeset
|
58 allkinds = matchmod.allpatternkinds |
899b4c74209c
fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org>
parents:
38902
diff
changeset
|
59 patterns = [getpattern(x, allkinds, _("pattern must be a string")) |
899b4c74209c
fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org>
parents:
38902
diff
changeset
|
60 for x in xs] |
899b4c74209c
fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org>
parents:
38902
diff
changeset
|
61 return mctx.matcher(patterns) |
899b4c74209c
fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org>
parents:
38902
diff
changeset
|
62 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
63 def andmatch(mctx, x, y): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
64 xm = getmatch(mctx, x) |
38921
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
65 ym = getmatch(mctx.narrowed(xm), y) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
66 return matchmod.intersectmatchers(xm, ym) |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
67 |
38844
d82c4d42b615
fileset: flatten 'or' nodes to unnest unionmatchers
Yuya Nishihara <yuya@tcha.org>
parents:
38843
diff
changeset
|
68 def ormatch(mctx, *xs): |
d82c4d42b615
fileset: flatten 'or' nodes to unnest unionmatchers
Yuya Nishihara <yuya@tcha.org>
parents:
38843
diff
changeset
|
69 ms = [getmatch(mctx, x) for x in xs] |
d82c4d42b615
fileset: flatten 'or' nodes to unnest unionmatchers
Yuya Nishihara <yuya@tcha.org>
parents:
38843
diff
changeset
|
70 return matchmod.unionmatcher(ms) |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
71 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
72 def notmatch(mctx, x): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
73 m = getmatch(mctx, x) |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
74 return mctx.predicate(lambda f: not m(f), predrepr=('<not %r>', m)) |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
75 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
76 def minusmatch(mctx, x, y): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
77 xm = getmatch(mctx, x) |
38921
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
78 ym = getmatch(mctx.narrowed(xm), y) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
79 return matchmod.differencematcher(xm, ym) |
17363
5d9e2031c0b1
fileset: actually implement 'minusset'
Patrick Mezard <patrick@mezard.eu>
parents:
16443
diff
changeset
|
80 |
38843
4dc498d61d86
fileset: flatten arguments list
Yuya Nishihara <yuya@tcha.org>
parents:
38813
diff
changeset
|
81 def listmatch(mctx, *xs): |
27518
737ffdabbde9
fileset: add hint for list error to use or
timeless <timeless@mozdev.org>
parents:
27464
diff
changeset
|
82 raise error.ParseError(_("can't use a list in this context"), |
38850
4fe8d1f077b8
help: add quotes to a few commands we point to
Martin von Zweigbergk <martinvonz@google.com>
parents:
38845
diff
changeset
|
83 hint=_('see \'hg help "filesets.x or y"\'')) |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
84 |
38599
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
85 def func(mctx, a, b): |
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
86 funcname = getsymbol(a) |
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
87 if funcname in symbols: |
38690
5d9749c598f0
fileset: remove callexisting flag and mctx.existing() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38689
diff
changeset
|
88 return symbols[funcname](mctx, b) |
38599
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
89 |
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
90 keep = lambda fn: getattr(fn, '__doc__', None) is not None |
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
91 |
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
92 syms = [s for (s, fn) in symbols.items() if keep(fn)] |
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
93 raise error.UnknownIdentifier(funcname, syms) |
d046bf37f1ba
fileset: move helper functions to top
Yuya Nishihara <yuya@tcha.org>
parents:
38420
diff
changeset
|
94 |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
95 # symbols are callable like: |
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
96 # fun(mctx, x) |
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
97 # with: |
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
98 # mctx - current matchctx instance |
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
99 # x - argument in tree form |
38845
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
100 symbols = filesetlang.symbols |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
101 |
38966
aebfc4c5c855
fileset: load core predicates directly to symbols dict
Yuya Nishihara <yuya@tcha.org>
parents:
38965
diff
changeset
|
102 predicate = registrar.filesetpredicate(symbols) |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
103 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
104 @predicate('modified()', callstatus=True, weight=_WEIGHT_STATUS) |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
105 def modified(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
106 """File that is modified according to :hg:`status`. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
107 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
108 # i18n: "modified" is a keyword |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
109 getargs(x, 0, 0, _("modified takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
110 s = set(mctx.status().modified) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
111 return mctx.predicate(s.__contains__, predrepr='modified') |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
112 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
113 @predicate('added()', callstatus=True, weight=_WEIGHT_STATUS) |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
114 def added(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
115 """File that is added according to :hg:`status`. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
116 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
117 # i18n: "added" is a keyword |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
118 getargs(x, 0, 0, _("added takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
119 s = set(mctx.status().added) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
120 return mctx.predicate(s.__contains__, predrepr='added') |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
121 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
122 @predicate('removed()', callstatus=True, weight=_WEIGHT_STATUS) |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
123 def removed(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
124 """File that is removed according to :hg:`status`. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
125 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
126 # i18n: "removed" is a keyword |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
127 getargs(x, 0, 0, _("removed takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
128 s = set(mctx.status().removed) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
129 return mctx.predicate(s.__contains__, predrepr='removed') |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
130 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
131 @predicate('deleted()', callstatus=True, weight=_WEIGHT_STATUS) |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
132 def deleted(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
133 """Alias for ``missing()``. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
134 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
135 # i18n: "deleted" is a keyword |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
136 getargs(x, 0, 0, _("deleted takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
137 s = set(mctx.status().deleted) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
138 return mctx.predicate(s.__contains__, predrepr='deleted') |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
139 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
140 @predicate('missing()', callstatus=True, weight=_WEIGHT_STATUS) |
27024
ceef5fb14872
fileset: add missing() predicate (issue4925)
liscju <piotr.listkiewicz@gmail.com>
parents:
26995
diff
changeset
|
141 def missing(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
142 """File that is missing according to :hg:`status`. |
27024
ceef5fb14872
fileset: add missing() predicate (issue4925)
liscju <piotr.listkiewicz@gmail.com>
parents:
26995
diff
changeset
|
143 """ |
ceef5fb14872
fileset: add missing() predicate (issue4925)
liscju <piotr.listkiewicz@gmail.com>
parents:
26995
diff
changeset
|
144 # i18n: "missing" is a keyword |
ceef5fb14872
fileset: add missing() predicate (issue4925)
liscju <piotr.listkiewicz@gmail.com>
parents:
26995
diff
changeset
|
145 getargs(x, 0, 0, _("missing takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
146 s = set(mctx.status().deleted) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
147 return mctx.predicate(s.__contains__, predrepr='deleted') |
27024
ceef5fb14872
fileset: add missing() predicate (issue4925)
liscju <piotr.listkiewicz@gmail.com>
parents:
26995
diff
changeset
|
148 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
149 @predicate('unknown()', callstatus=True, weight=_WEIGHT_STATUS_THOROUGH) |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
150 def unknown(mctx, x): |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
151 """File that is unknown according to :hg:`status`.""" |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
152 # i18n: "unknown" is a keyword |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
153 getargs(x, 0, 0, _("unknown takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
154 s = set(mctx.status().unknown) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
155 return mctx.predicate(s.__contains__, predrepr='unknown') |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
156 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
157 @predicate('ignored()', callstatus=True, weight=_WEIGHT_STATUS_THOROUGH) |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
158 def ignored(mctx, x): |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
159 """File that is ignored according to :hg:`status`.""" |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
160 # i18n: "ignored" is a keyword |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
161 getargs(x, 0, 0, _("ignored takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
162 s = set(mctx.status().ignored) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
163 return mctx.predicate(s.__contains__, predrepr='ignored') |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
164 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
165 @predicate('clean()', callstatus=True, weight=_WEIGHT_STATUS) |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
166 def clean(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
167 """File that is clean according to :hg:`status`. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
168 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
169 # i18n: "clean" is a keyword |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
170 getargs(x, 0, 0, _("clean takes no arguments")) |
31702
992882cef7e1
fileset: perform membership test against set for status queries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31264
diff
changeset
|
171 s = set(mctx.status().clean) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
172 return mctx.predicate(s.__contains__, predrepr='clean') |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
173 |
38686
131aae58a316
fileset: add "tracked()" to explicitly select files in the revision
Yuya Nishihara <yuya@tcha.org>
parents:
38685
diff
changeset
|
174 @predicate('tracked()') |
131aae58a316
fileset: add "tracked()" to explicitly select files in the revision
Yuya Nishihara <yuya@tcha.org>
parents:
38685
diff
changeset
|
175 def tracked(mctx, x): |
131aae58a316
fileset: add "tracked()" to explicitly select files in the revision
Yuya Nishihara <yuya@tcha.org>
parents:
38685
diff
changeset
|
176 """File that is under Mercurial control.""" |
131aae58a316
fileset: add "tracked()" to explicitly select files in the revision
Yuya Nishihara <yuya@tcha.org>
parents:
38685
diff
changeset
|
177 # i18n: "tracked" is a keyword |
131aae58a316
fileset: add "tracked()" to explicitly select files in the revision
Yuya Nishihara <yuya@tcha.org>
parents:
38685
diff
changeset
|
178 getargs(x, 0, 0, _("tracked takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
179 return mctx.predicate(mctx.ctx.__contains__, predrepr='tracked') |
38686
131aae58a316
fileset: add "tracked()" to explicitly select files in the revision
Yuya Nishihara <yuya@tcha.org>
parents:
38685
diff
changeset
|
180 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
181 @predicate('binary()', weight=_WEIGHT_READ_CONTENTS) |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
182 def binary(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
183 """File that appears to be binary (contains NUL bytes). |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
184 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
185 # i18n: "binary" is a keyword |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
186 getargs(x, 0, 0, _("binary takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
187 return mctx.fpredicate(lambda fctx: fctx.isbinary(), |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
188 predrepr='binary', cache=True) |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
189 |
38690
5d9749c598f0
fileset: remove callexisting flag and mctx.existing() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38689
diff
changeset
|
190 @predicate('exec()') |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
191 def exec_(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
192 """File that is marked as executable. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
193 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
194 # i18n: "exec" is a keyword |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
195 getargs(x, 0, 0, _("exec takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
196 ctx = mctx.ctx |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
197 return mctx.predicate(lambda f: ctx.flags(f) == 'x', predrepr='exec') |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
198 |
38690
5d9749c598f0
fileset: remove callexisting flag and mctx.existing() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38689
diff
changeset
|
199 @predicate('symlink()') |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
200 def symlink(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
201 """File that is marked as a symlink. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
202 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
203 # i18n: "symlink" is a keyword |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
204 getargs(x, 0, 0, _("symlink takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
205 ctx = mctx.ctx |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
206 return mctx.predicate(lambda f: ctx.flags(f) == 'l', predrepr='symlink') |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
207 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
208 @predicate('resolved()', weight=_WEIGHT_STATUS) |
14679
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
209 def resolved(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
210 """File that is marked resolved according to :hg:`resolve -l`. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
211 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
212 # i18n: "resolved" is a keyword |
14679
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
213 getargs(x, 0, 0, _("resolved takes no arguments")) |
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
214 if mctx.ctx.rev() is not None: |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
215 return mctx.never() |
26995
d5a6be56970b
fileset: switch to mergestate.read()
Siddharth Agarwal <sid0@fb.com>
parents:
26587
diff
changeset
|
216 ms = merge.mergestate.read(mctx.ctx.repo()) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
217 return mctx.predicate(lambda f: f in ms and ms[f] == 'r', |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
218 predrepr='resolved') |
14679
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
219 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
220 @predicate('unresolved()', weight=_WEIGHT_STATUS) |
14679
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
221 def unresolved(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
222 """File that is marked unresolved according to :hg:`resolve -l`. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
223 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
224 # i18n: "unresolved" is a keyword |
14679
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
225 getargs(x, 0, 0, _("unresolved takes no arguments")) |
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
226 if mctx.ctx.rev() is not None: |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
227 return mctx.never() |
26995
d5a6be56970b
fileset: switch to mergestate.read()
Siddharth Agarwal <sid0@fb.com>
parents:
26587
diff
changeset
|
228 ms = merge.mergestate.read(mctx.ctx.repo()) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
229 return mctx.predicate(lambda f: f in ms and ms[f] == 'u', |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
230 predrepr='unresolved') |
14679
e141e1cee0cc
fileset: add resolved and unresolved predicates
Matt Mackall <mpm@selenic.com>
parents:
14678
diff
changeset
|
231 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
232 @predicate('hgignore()', weight=_WEIGHT_STATUS) |
14680 | 233 def hgignore(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
234 """File that matches the active .hgignore pattern. |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
235 """ |
23113
c2dd79ad99cb
i18n: add i18n comment to error messages of filesets predicates
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22924
diff
changeset
|
236 # i18n: "hgignore" is a keyword |
14680 | 237 getargs(x, 0, 0, _("hgignore takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
238 return mctx.ctx.repo().dirstate._ignore |
14680 | 239 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
240 @predicate('portable()', weight=_WEIGHT_CHECK_FILENAME) |
24408
caa6b6c65dc3
fileset: add a fileset for portable filenames
Siddharth Agarwal <sid0@fb.com>
parents:
24334
diff
changeset
|
241 def portable(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
242 """File that has a portable name. (This doesn't include filenames with case |
24408
caa6b6c65dc3
fileset: add a fileset for portable filenames
Siddharth Agarwal <sid0@fb.com>
parents:
24334
diff
changeset
|
243 collisions.) |
caa6b6c65dc3
fileset: add a fileset for portable filenames
Siddharth Agarwal <sid0@fb.com>
parents:
24334
diff
changeset
|
244 """ |
caa6b6c65dc3
fileset: add a fileset for portable filenames
Siddharth Agarwal <sid0@fb.com>
parents:
24334
diff
changeset
|
245 # i18n: "portable" is a keyword |
caa6b6c65dc3
fileset: add a fileset for portable filenames
Siddharth Agarwal <sid0@fb.com>
parents:
24334
diff
changeset
|
246 getargs(x, 0, 0, _("portable takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
247 return mctx.predicate(lambda f: util.checkwinfilename(f) is None, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
248 predrepr='portable') |
24408
caa6b6c65dc3
fileset: add a fileset for portable filenames
Siddharth Agarwal <sid0@fb.com>
parents:
24334
diff
changeset
|
249 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
250 @predicate('grep(regex)', weight=_WEIGHT_READ_CONTENTS) |
14682
8785fd757077
fileset: add grep predicate
Matt Mackall <mpm@selenic.com>
parents:
14681
diff
changeset
|
251 def grep(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
252 """File contains the given regular expression. |
14682
8785fd757077
fileset: add grep predicate
Matt Mackall <mpm@selenic.com>
parents:
14681
diff
changeset
|
253 """ |
17368
01cc267fc105
fileset: do not traceback on invalid grep pattern
Patrick Mezard <patrick@mezard.eu>
parents:
17367
diff
changeset
|
254 try: |
01cc267fc105
fileset: do not traceback on invalid grep pattern
Patrick Mezard <patrick@mezard.eu>
parents:
17367
diff
changeset
|
255 # i18n: "grep" is a keyword |
01cc267fc105
fileset: do not traceback on invalid grep pattern
Patrick Mezard <patrick@mezard.eu>
parents:
17367
diff
changeset
|
256 r = re.compile(getstring(x, _("grep requires a pattern"))) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25654
diff
changeset
|
257 except re.error as e: |
38116
5f2dc1b71cf1
py3: use utils.stringutil.forcebytestr to convert error to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37259
diff
changeset
|
258 raise error.ParseError(_('invalid match pattern: %s') % |
5f2dc1b71cf1
py3: use utils.stringutil.forcebytestr to convert error to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37259
diff
changeset
|
259 stringutil.forcebytestr(e)) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
260 return mctx.fpredicate(lambda fctx: r.search(fctx.data()), |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
261 predrepr=('grep(%r)', r.pattern), cache=True) |
14682
8785fd757077
fileset: add grep predicate
Matt Mackall <mpm@selenic.com>
parents:
14681
diff
changeset
|
262 |
14683
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
263 def _sizetomax(s): |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
264 try: |
25925
23c4589fc678
filesets: ignore unit case in size() predicate for single value
Anton Shestakov <av6@dwimlabs.net>
parents:
25815
diff
changeset
|
265 s = s.strip().lower() |
19194
1d08df65cd3c
util: migrate fileset._sizetoint to util.sizetoint
Bryan O'Sullivan <bryano@fb.com>
parents:
18842
diff
changeset
|
266 for k, v in util._sizeunits: |
14683
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
267 if s.endswith(k): |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
268 # max(4k) = 5k - 1, max(4.5k) = 4.6k - 1 |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
269 n = s[:-len(k)] |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
270 inc = 1.0 |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
271 if "." in n: |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
272 inc /= 10 ** len(n.split(".")[1]) |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
273 return int((float(n) + inc) * v) - 1 |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
274 # no extension, this is a precise value |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
275 return int(s) |
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
276 except ValueError: |
14716
552329013bac
fileset: use ParseError pos field correctly
Mads Kiilerich <mads@kiilerich.com>
parents:
14701
diff
changeset
|
277 raise error.ParseError(_("couldn't parse size: %s") % s) |
14683
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
278 |
38687
1500cbe22d53
fileset: parse argument of size() by predicate function
Yuya Nishihara <yuya@tcha.org>
parents:
38686
diff
changeset
|
279 def sizematcher(expr): |
35615
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
280 """Return a function(size) -> bool from the ``size()`` expression""" |
38687
1500cbe22d53
fileset: parse argument of size() by predicate function
Yuya Nishihara <yuya@tcha.org>
parents:
38686
diff
changeset
|
281 expr = expr.strip() |
35615
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
282 if '-' in expr: # do we have a range? |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
283 a, b = expr.split('-', 1) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
284 a = util.sizetoint(a) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
285 b = util.sizetoint(b) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
286 return lambda x: x >= a and x <= b |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
287 elif expr.startswith("<="): |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
288 a = util.sizetoint(expr[2:]) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
289 return lambda x: x <= a |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
290 elif expr.startswith("<"): |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
291 a = util.sizetoint(expr[1:]) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
292 return lambda x: x < a |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
293 elif expr.startswith(">="): |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
294 a = util.sizetoint(expr[2:]) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
295 return lambda x: x >= a |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
296 elif expr.startswith(">"): |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
297 a = util.sizetoint(expr[1:]) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
298 return lambda x: x > a |
36535
db33c5bc781f
fileset: drop bad "elif:" trying to check invalid size expression
Yuya Nishihara <yuya@tcha.org>
parents:
36503
diff
changeset
|
299 else: |
35615
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
300 a = util.sizetoint(expr) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
301 b = _sizetomax(expr) |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
302 return lambda x: x >= a and x <= b |
0e369eca888f
fileset: split the logic for matching a size expression to a separate method
Matt Harbison <matt_harbison@yahoo.com>
parents:
32556
diff
changeset
|
303 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
304 @predicate('size(expression)', weight=_WEIGHT_STATUS) |
14683
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
305 def size(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
306 """File size matches the given expression. Examples: |
14683
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
307 |
29991
d532ef155b0e
help: clarify quotes are needed for filesets.size expressions
timeless <timeless@mozdev.org>
parents:
28448
diff
changeset
|
308 - size('1k') - files from 1024 to 2047 bytes |
d532ef155b0e
help: clarify quotes are needed for filesets.size expressions
timeless <timeless@mozdev.org>
parents:
28448
diff
changeset
|
309 - size('< 20k') - files less than 20480 bytes |
d532ef155b0e
help: clarify quotes are needed for filesets.size expressions
timeless <timeless@mozdev.org>
parents:
28448
diff
changeset
|
310 - size('>= .5MB') - files at least 524288 bytes |
d532ef155b0e
help: clarify quotes are needed for filesets.size expressions
timeless <timeless@mozdev.org>
parents:
28448
diff
changeset
|
311 - size('4k - 1MB') - files from 4096 bytes to 1048576 bytes |
14683
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
312 """ |
38687
1500cbe22d53
fileset: parse argument of size() by predicate function
Yuya Nishihara <yuya@tcha.org>
parents:
38686
diff
changeset
|
313 # i18n: "size" is a keyword |
1500cbe22d53
fileset: parse argument of size() by predicate function
Yuya Nishihara <yuya@tcha.org>
parents:
38686
diff
changeset
|
314 expr = getstring(x, _("size requires an expression")) |
1500cbe22d53
fileset: parse argument of size() by predicate function
Yuya Nishihara <yuya@tcha.org>
parents:
38686
diff
changeset
|
315 m = sizematcher(expr) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
316 return mctx.fpredicate(lambda fctx: m(fctx.size()), |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
317 predrepr=('size(%r)', expr), cache=True) |
14683
281102f37b24
fileset: add size() predicate
Matt Mackall <mpm@selenic.com>
parents:
14682
diff
changeset
|
318 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
319 @predicate('encoding(name)', weight=_WEIGHT_READ_CONTENTS) |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
320 def encoding(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
321 """File can be successfully decoded with the given character |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
322 encoding. May not be useful for encodings other than ASCII and |
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
323 UTF-8. |
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
324 """ |
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
325 |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
326 # i18n: "encoding" is a keyword |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
327 enc = getstring(x, _("encoding requires an encoding name")) |
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
328 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
329 def encp(fctx): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
330 d = fctx.data() |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
331 try: |
38334
5cb39a368c80
py3: cast bytes encoding name to str in fileset.py
Yuya Nishihara <yuya@tcha.org>
parents:
38116
diff
changeset
|
332 d.decode(pycompat.sysstr(enc)) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
333 return True |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
334 except LookupError: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26233
diff
changeset
|
335 raise error.Abort(_("unknown encoding '%s'") % enc) |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
336 except UnicodeDecodeError: |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
337 return False |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
338 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
339 return mctx.fpredicate(encp, predrepr=('encoding(%r)', enc), cache=True) |
14684
87b9d6a7d807
fileset: add encoding() predicate
Matt Mackall <mpm@selenic.com>
parents:
14683
diff
changeset
|
340 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
341 @predicate('eol(style)', weight=_WEIGHT_READ_CONTENTS) |
18842
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
342 def eol(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
343 """File contains newlines of the given style (dos, unix, mac). Binary |
18842
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
344 files are excluded, files with mixed line endings match multiple |
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
345 styles. |
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
346 """ |
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
347 |
28056
4f8ced23345e
fileset: fix copy/paste in eol() error message
Matt Harbison <matt_harbison@yahoo.com>
parents:
27518
diff
changeset
|
348 # i18n: "eol" is a keyword |
4f8ced23345e
fileset: fix copy/paste in eol() error message
Matt Harbison <matt_harbison@yahoo.com>
parents:
27518
diff
changeset
|
349 enc = getstring(x, _("eol requires a style name")) |
18842
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
350 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
351 def eolp(fctx): |
38420
235d0bc11e1d
fileset: use filectx.isbinary() to filter out binaries in eol()
Matt Harbison <matt_harbison@yahoo.com>
parents:
38335
diff
changeset
|
352 if fctx.isbinary(): |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
353 return False |
38420
235d0bc11e1d
fileset: use filectx.isbinary() to filter out binaries in eol()
Matt Harbison <matt_harbison@yahoo.com>
parents:
38335
diff
changeset
|
354 d = fctx.data() |
18842
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
355 if (enc == 'dos' or enc == 'win') and '\r\n' in d: |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
356 return True |
18842
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
357 elif enc == 'unix' and re.search('(?<!\r)\n', d): |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
358 return True |
18842
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
359 elif enc == 'mac' and re.search('\r(?!\n)', d): |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
360 return True |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
361 return False |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
362 return mctx.fpredicate(eolp, predrepr=('eol(%r)', enc), cache=True) |
18842
3ce3f2b059a1
filesets: add eol predicate
Matt Mackall <mpm@selenic.com>
parents:
18364
diff
changeset
|
363 |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
364 @predicate('copied()') |
14685
394121d9f4fc
fileset: add copied predicate
Matt Mackall <mpm@selenic.com>
parents:
14684
diff
changeset
|
365 def copied(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
366 """File that is recorded as being copied. |
14685
394121d9f4fc
fileset: add copied predicate
Matt Mackall <mpm@selenic.com>
parents:
14684
diff
changeset
|
367 """ |
14785
0f0bd4d028d3
fileset: add i18n hints for keywords
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
14718
diff
changeset
|
368 # i18n: "copied" is a keyword |
14718
0c81948636f3
fileset: copied takes no arguments
Mads Kiilerich <mads@kiilerich.com>
parents:
14717
diff
changeset
|
369 getargs(x, 0, 0, _("copied takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
370 def copiedp(fctx): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
371 p = fctx.parents() |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
372 return p and p[0].path() != fctx.path() |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
373 return mctx.fpredicate(copiedp, predrepr='copied', cache=True) |
14685
394121d9f4fc
fileset: add copied predicate
Matt Mackall <mpm@selenic.com>
parents:
14684
diff
changeset
|
374 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
375 @predicate('revs(revs, pattern)', weight=_WEIGHT_STATUS) |
31203
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
376 def revs(mctx, x): |
31264
2140e12d3258
fileset: drop false function signatures from revs() and status() docs
Yuya Nishihara <yuya@tcha.org>
parents:
31205
diff
changeset
|
377 """Evaluate set in the specified revisions. If the revset match multiple |
2140e12d3258
fileset: drop false function signatures from revs() and status() docs
Yuya Nishihara <yuya@tcha.org>
parents:
31205
diff
changeset
|
378 revs, this will return file matching pattern in any of the revision. |
31203
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
379 """ |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
380 # i18n: "revs" is a keyword |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
381 r, x = getargs(x, 2, 2, _("revs takes two arguments")) |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
382 # i18n: "revs" is a keyword |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
383 revspec = getstring(r, _("first argument to revs must be a revision")) |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
384 repo = mctx.ctx.repo() |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
385 revs = scmutil.revrange(repo, [revspec]) |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
386 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
387 matchers = [] |
31203
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
388 for r in revs: |
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
389 ctx = repo[r] |
38917
0f56d08e6271
fileset: move buildstatus() to matchctx method
Yuya Nishihara <yuya@tcha.org>
parents:
38916
diff
changeset
|
390 mc = mctx.switch(ctx.p1(), ctx) |
38915
da3bd2afd68d
fileset: pass in basectx to _buildstatus()
Yuya Nishihara <yuya@tcha.org>
parents:
38904
diff
changeset
|
391 matchers.append(getmatch(mc, x)) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
392 if not matchers: |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
393 return mctx.never() |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
394 if len(matchers) == 1: |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
395 return matchers[0] |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
396 return matchmod.unionmatcher(matchers) |
31203
4140d49d2efb
fileset: add revs(revs, fileset) to evaluate set in working directory
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31202
diff
changeset
|
397 |
38902
61ab546b71c3
fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents:
38870
diff
changeset
|
398 @predicate('status(base, rev, pattern)', weight=_WEIGHT_STATUS) |
31205
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
399 def status(mctx, x): |
31264
2140e12d3258
fileset: drop false function signatures from revs() and status() docs
Yuya Nishihara <yuya@tcha.org>
parents:
31205
diff
changeset
|
400 """Evaluate predicate using status change between ``base`` and |
31205
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
401 ``rev``. Examples: |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
402 |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
403 - ``status(3, 7, added())`` - matches files added from "3" to "7" |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
404 """ |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
405 repo = mctx.ctx.repo() |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
406 # i18n: "status" is a keyword |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
407 b, r, x = getargs(x, 3, 3, _("status takes three arguments")) |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
408 # i18n: "status" is a keyword |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
409 baseerr = _("first argument to status must be a revision") |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
410 baserevspec = getstring(b, baseerr) |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
411 if not baserevspec: |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
412 raise error.ParseError(baseerr) |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
413 reverr = _("second argument to status must be a revision") |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
414 revspec = getstring(r, reverr) |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
415 if not revspec: |
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
416 raise error.ParseError(reverr) |
37259
f290f130d7fc
fileset: use context-returning revpair()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37253
diff
changeset
|
417 basectx, ctx = scmutil.revpair(repo, [baserevspec, revspec]) |
38917
0f56d08e6271
fileset: move buildstatus() to matchctx method
Yuya Nishihara <yuya@tcha.org>
parents:
38916
diff
changeset
|
418 mc = mctx.switch(basectx, ctx) |
38915
da3bd2afd68d
fileset: pass in basectx to _buildstatus()
Yuya Nishihara <yuya@tcha.org>
parents:
38904
diff
changeset
|
419 return getmatch(mc, x) |
31205
6b098ac4542e
fileset: add a 'status(...)' predicate to control evaluation context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31204
diff
changeset
|
420 |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
421 @predicate('subrepo([pattern])') |
16443
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
422 def subrepo(mctx, x): |
27460
11286ac374f3
fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27459
diff
changeset
|
423 """Subrepositories whose paths match the given pattern. |
16443
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
424 """ |
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
425 # i18n: "subrepo" is a keyword |
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
426 getargs(x, 0, 1, _("subrepo takes at most one argument")) |
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
427 ctx = mctx.ctx |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
428 sstate = ctx.substate |
16443
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
429 if x: |
35741
73432eee0ac4
fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents:
35739
diff
changeset
|
430 pat = getpattern(x, matchmod.allpatternkinds, |
73432eee0ac4
fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents:
35739
diff
changeset
|
431 # i18n: "subrepo" is a keyword |
73432eee0ac4
fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents:
35739
diff
changeset
|
432 _("subrepo requires a pattern or no arguments")) |
16443
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
433 fast = not matchmod.patkind(pat) |
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
434 if fast: |
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
435 def m(s): |
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
436 return (s == pat) |
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
437 else: |
24334
eda2f36889b5
fileset: replace 'ctx._repo' with 'ctx.repo()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24218
diff
changeset
|
438 m = matchmod.match(ctx.repo().root, '', [pat], ctx=ctx) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
439 return mctx.predicate(lambda f: f in sstate and m(f), |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
440 predrepr=('subrepo(%r)', pat)) |
16443
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
441 else: |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
442 return mctx.predicate(sstate.__contains__, predrepr='subrepo') |
16443
9e02e032b522
fileset: add "subrepo" fileset symbol
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15963
diff
changeset
|
443 |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
444 methods = { |
38918
e79a69af1593
fileset: insert hints where status should be computed
Yuya Nishihara <yuya@tcha.org>
parents:
38917
diff
changeset
|
445 'withstatus': getmatchwithstatus, |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
446 'string': stringmatch, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
447 'symbol': stringmatch, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
448 'kindpat': kindpatmatch, |
38904
899b4c74209c
fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org>
parents:
38902
diff
changeset
|
449 'patterns': patternsmatch, |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
450 'and': andmatch, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
451 'or': ormatch, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
452 'minus': minusmatch, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
453 'list': listmatch, |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
454 'not': notmatch, |
14676
e80fa502b8cf
fileset: add some basic predicates
Matt Mackall <mpm@selenic.com>
parents:
14673
diff
changeset
|
455 'func': func, |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
456 } |
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
457 |
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
458 class matchctx(object): |
38917
0f56d08e6271
fileset: move buildstatus() to matchctx method
Yuya Nishihara <yuya@tcha.org>
parents:
38916
diff
changeset
|
459 def __init__(self, basectx, ctx, badfn=None): |
38916
8d6780f0b34d
fileset: keep basectx by matchctx
Yuya Nishihara <yuya@tcha.org>
parents:
38915
diff
changeset
|
460 self._basectx = basectx |
14551
68d814a3cefd
fileset: basic pattern and boolean support
Matt Mackall <mpm@selenic.com>
parents:
14513
diff
changeset
|
461 self.ctx = ctx |
38614
5cbcbe51d38d
fileset: pass in badfn to inner matchers
Yuya Nishihara <yuya@tcha.org>
parents:
38613
diff
changeset
|
462 self._badfn = badfn |
38921
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
463 self._match = None |
38917
0f56d08e6271
fileset: move buildstatus() to matchctx method
Yuya Nishihara <yuya@tcha.org>
parents:
38916
diff
changeset
|
464 self._status = None |
0f56d08e6271
fileset: move buildstatus() to matchctx method
Yuya Nishihara <yuya@tcha.org>
parents:
38916
diff
changeset
|
465 |
38921
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
466 def narrowed(self, match): |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
467 """Create matchctx for a sub-tree narrowed by the given matcher""" |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
468 mctx = matchctx(self._basectx, self.ctx, self._badfn) |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
469 mctx._match = match |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
470 # leave wider status which we don't have to care |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
471 mctx._status = self._status |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
472 return mctx |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
473 |
38920
dec16c0cce50
fileset: move copy constructor of matchctx near __init__
Yuya Nishihara <yuya@tcha.org>
parents:
38919
diff
changeset
|
474 def switch(self, basectx, ctx): |
38921
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
475 mctx = matchctx(basectx, ctx, self._badfn) |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
476 mctx._match = self._match |
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
477 return mctx |
38920
dec16c0cce50
fileset: move copy constructor of matchctx near __init__
Yuya Nishihara <yuya@tcha.org>
parents:
38919
diff
changeset
|
478 |
38919
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
479 def withstatus(self, keys): |
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
480 """Create matchctx which has precomputed status specified by the keys""" |
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
481 mctx = matchctx(self._basectx, self.ctx, self._badfn) |
38921
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
482 mctx._match = self._match |
38919
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
483 mctx._buildstatus(keys) |
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
484 return mctx |
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
485 |
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
486 def _buildstatus(self, keys): |
38921
ff42ec7845e4
fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org>
parents:
38920
diff
changeset
|
487 self._status = self._basectx.status(self.ctx, self._match, |
38919
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
488 listignored='ignored' in keys, |
38965
41e04212261a
fileset: turn on listclean conditionally
Yuya Nishihara <yuya@tcha.org>
parents:
38921
diff
changeset
|
489 listclean='clean' in keys, |
38919
80fd7371f2d8
fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org>
parents:
38918
diff
changeset
|
490 listunknown='unknown' in keys) |
38690
5d9749c598f0
fileset: remove callexisting flag and mctx.existing() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38689
diff
changeset
|
491 |
14677
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
492 def status(self): |
2a758ffc821e
fileset: add support for file status predicates
Matt Mackall <mpm@selenic.com>
parents:
14676
diff
changeset
|
493 return self._status |
38684
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
494 |
14673 | 495 def matcher(self, patterns): |
38614
5cbcbe51d38d
fileset: pass in badfn to inner matchers
Yuya Nishihara <yuya@tcha.org>
parents:
38613
diff
changeset
|
496 return self.ctx.match(patterns, badfn=self._badfn) |
38684
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
497 |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
498 def predicate(self, predfn, predrepr=None, cache=False): |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
499 """Create a matcher to select files by predfn(filename)""" |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
500 if cache: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
501 predfn = util.cachefunc(predfn) |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
502 repo = self.ctx.repo() |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
503 return matchmod.predicatematcher(repo.root, repo.getcwd(), predfn, |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
504 predrepr=predrepr, badfn=self._badfn) |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
505 |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
506 def fpredicate(self, predfn, predrepr=None, cache=False): |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
507 """Create a matcher to select files by predfn(fctx) at the current |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
508 revision |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
509 |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
510 Missing files are ignored. |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
511 """ |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
512 ctx = self.ctx |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
513 if ctx.rev() is None: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
514 def fctxpredfn(f): |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
515 try: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
516 fctx = ctx[f] |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
517 except error.LookupError: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
518 return False |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
519 try: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
520 fctx.audit() |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
521 except error.Abort: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
522 return False |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
523 try: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
524 return predfn(fctx) |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
525 except (IOError, OSError) as e: |
38758
774f92710a81
fileset: suppress EACCES while reading arbitrary paths via filectx API
Yuya Nishihara <yuya@tcha.org>
parents:
38692
diff
changeset
|
526 # open()-ing a directory fails with EACCES on Windows |
774f92710a81
fileset: suppress EACCES while reading arbitrary paths via filectx API
Yuya Nishihara <yuya@tcha.org>
parents:
38692
diff
changeset
|
527 if e.errno in (errno.ENOENT, errno.EACCES, errno.ENOTDIR, |
774f92710a81
fileset: suppress EACCES while reading arbitrary paths via filectx API
Yuya Nishihara <yuya@tcha.org>
parents:
38692
diff
changeset
|
528 errno.EISDIR): |
38684
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
529 return False |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
530 raise |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
531 else: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
532 def fctxpredfn(f): |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
533 try: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
534 fctx = ctx[f] |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
535 except error.LookupError: |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
536 return False |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
537 return predfn(fctx) |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
538 return self.predicate(fctxpredfn, predrepr=predrepr, cache=cache) |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
539 |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
540 def never(self): |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
541 """Create a matcher to select nothing""" |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
542 repo = self.ctx.repo() |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
543 return matchmod.nevermatcher(repo.root, repo.getcwd(), |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
544 badfn=self._badfn) |
07b551a4df44
fileset: add helpers to make predicatematcher and nevermatcher
Yuya Nishihara <yuya@tcha.org>
parents:
38614
diff
changeset
|
545 |
38613
760cc5dc01e8
fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38599
diff
changeset
|
546 def match(ctx, expr, badfn=None): |
760cc5dc01e8
fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38599
diff
changeset
|
547 """Create a matcher for a single fileset expression""" |
38845
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38844
diff
changeset
|
548 tree = filesetlang.parse(expr) |
38866
6371ab78c3b3
fileset: add phase to transform parsed tree
Yuya Nishihara <yuya@tcha.org>
parents:
38850
diff
changeset
|
549 tree = filesetlang.analyze(tree) |
38869
7e7e2b2ff284
fileset: add stub for weight-based optimization
Yuya Nishihara <yuya@tcha.org>
parents:
38868
diff
changeset
|
550 tree = filesetlang.optimize(tree) |
38917
0f56d08e6271
fileset: move buildstatus() to matchctx method
Yuya Nishihara <yuya@tcha.org>
parents:
38916
diff
changeset
|
551 mctx = matchctx(ctx.p1(), ctx, badfn=badfn) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
38687
diff
changeset
|
552 return getmatch(mctx, tree) |
14678
5ef7b87530f6
fileset: prescan parse tree to optimize status usage
Matt Mackall <mpm@selenic.com>
parents:
14677
diff
changeset
|
553 |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
554 |
28447
4eb5496c2bd4
registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28056
diff
changeset
|
555 def loadpredicate(ui, extname, registrarobj): |
4eb5496c2bd4
registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28056
diff
changeset
|
556 """Load fileset predicates from specified registrarobj |
4eb5496c2bd4
registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28056
diff
changeset
|
557 """ |
4eb5496c2bd4
registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28056
diff
changeset
|
558 for name, func in registrarobj._table.iteritems(): |
4eb5496c2bd4
registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28056
diff
changeset
|
559 symbols[name] = func |
4eb5496c2bd4
registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28056
diff
changeset
|
560 |
14681
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
561 # tell hggettext to extract docstrings from these functions: |
0744db5eb51c
fileset: add some function help text
Matt Mackall <mpm@selenic.com>
parents:
14680
diff
changeset
|
562 i18nfunctions = symbols.values() |