Mercurial supports a functional language for selecting a set of
files.
Like other file patterns, this pattern type is indicated by a
prefix, 'set:'. The language supports a number of predicates
which are joined by infix operators. Parenthesis can be used for
grouping.
Identifiers such as filenames or patterns must be quoted with
single or double quotes if they contain characters outside of
[.*{}[]?/\_a-zA-Z0-9\x80-\xff]
or if they match one of the
predefined predicates. This generally applies to file patterns
other than globs and arguments for predicates.
Special characters can be used in quoted identifiers by escaping
them, e.g., \n
is interpreted as a newline. To prevent them from
being interpreted, strings can be prefixed with r
, e.g. r'...'
.
There is a single prefix operator:
not x
Files not in x. Short form is ! x
.
These are the supported infix operators:
x and y
The intersection of files in x and y. Short form is x & y
.
x or y
The union of files in x and y. There are two alternative
short forms: x | y
and x + y
.
x - y
Files in x but not in y.
The following predicates are supported:
added()
File that is added according to status.
binary()
File that appears to be binary (contains NUL bytes).
clean()
File that is clean according to status.
copied()
File that is recorded as being copied.
deleted()
File that is deleted according to status.
encoding(name)
File can be successfully decoded with the given character
encoding. May not be useful for encodings other than ASCII
and UTF-8.
eol(style)
File contains newlines of the given style (dos, unix,
mac). Binary files are excluded, files with mixed line
endings match multiple styles.
exec()
File that is marked as executable.
grep(regex)
File contains the given regular expression.
hgignore()
File that matches the active .hgignore pattern.
ignored()
File that is ignored according to status. These files will
only be considered if this predicate is used.
modified()
File that is modified according to status.
removed()
File that is removed according to status.
resolved()
File that is marked resolved according to the resolve
state.
size(expression)
File size matches the given expression. Examples:
• 1k (files from 1024 to 2047 bytes)
• < 20k (files less than 20480 bytes)
• >= .5MB (files at least 524288 bytes)
• 4k - 1MB (files from 4096 bytes to 1048576 bytes)
subrepo([pattern])
Subrepositories whose paths match the given pattern.
symlink()
File that is marked as a symlink.
unknown()
File that is unknown according to status. These files will
only be considered if this predicate is used.
unresolved()
File that is marked unresolved according to the resolve
state.
Some sample queries:
• Show status of files that appear to be binary in the working
directory:
hg status -A "set:binary()"
• Forget files that are in .hgignore but are already tracked:
hg forget "set:hgignore() and not ignored()"
• Find text files that contain a string:
hg locate "set:grep(magic) and not binary()"
• Find C files in a non-standard encoding:
hg locate "set:**.c and not encoding('UTF-8')"
• Revert copies of large binary files:
hg revert "set:copied() and binary() and size('>1M')"
• Remove files listed in foo.lst that contain the letter a or b:
hg remove "set: 'listfile:foo.lst' and (**a* or **b*)"
See also hg help patterns
.