Specifying File Sets

    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.

    "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)

    "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".