Using Patchew Search

The general form of search string is a list of terms separated with space:

QUERY = TERM TERM ...

Each term can be either a plain keyword, or a predict in the form of PRED:EXP, where PRED is the predefined filter and EXP is the parameters to be applied to the filter. As a simple example:

bugfix from:Bob to:George age:>1w

to search emails titled as 'bugfix' (a subject keyword filter) from Bob (a sender filter) to George (a recipient filter) before 1 week ago (an age filter).

or

bugfix from:Bob is:reviewed not:obsoleted

to search all emails from Bob that have "bugfix" in subject, and have been reviewed but is not obsoleted (by a new revision of this series). Because there are syntax shortcut for some predicts, it can be simplified as:

from:Bob fix +reviewed -tested

Supported filter types

Search by age

  • Syntax: age:AGE
  • Syntax: >AGE
  • Syntax: <AGE

Filter by age of the message. Supports "d" (day), "w" (week), "m" (month) and "y" (year) as units. Examples:

  • age:1d
  • age:>2d
  • age:<1w
  • <1m
  • >1w

Search by series state

Syntax:

  • is:reviewed - all the patches in the series is reviewed
  • is:obsolete, is:obsoleted, is:old - the series has newer version
  • is:complete - the series has all the patches it contains
  • is:merged - the series is included in the project's git tree
  • is:pull - the series is a pull request
  • is:applied - a git tree is available for the series
  • has:replies - the series received a reply (apart from patches sent by the submitter)

Example:

is:reviewed

"not:X" is the opposite of "is:X". "+X" and "-X" are shorter synonyms of "is:X" and "not:X" respectively.


Search addresses

  • Syntax: from:ADDRESS
  • Syntax: to:ADDRESS

Compare the address info of message. Example:

from:alice to:bob

Search by maintainer associated with the changeset

  • Syntax: maintained-by:NAME
  • Syntax: maint:NAME

NAME can be the name, email or a substring of MAINTAINERS file entries of the maintainer.


Search by result

Syntax:

  • pending:NAME, failure:NAME, running:NAME - any result with the given name is in the pending/failure/running state
  • success:NAME - all results with the given name are in the success state (and there is at least one result with the given name)

where NAME can be e.g. "git", "testing", "testing.TEST-NAME"

Example:

success:git
failure:testing.FreeBSD

Search by review state

Syntax:

  • accept:USERNAME or ack:USERNAME - the series was marked as accepted by the user
  • reject:USERNAME or nack:USERNAME - the series was marked as reject by the user
  • review:USERNAME - the series was marked as accepted or rejected by the user
  • watch:USERNAME - the series is in the user's watched queue
  • queue:NAME - the series is in the given queue of the current user

USERNAME can be "me" to identify the current user


Reverse condition

  • Syntax: !TERM

Negative of an expression. Example:

!is:reviewed     (query series that are not reviewed)
!has:replies     (query series that have not received any comment)

Search by message id

  • Syntax: id:MESSAGE-ID
  • Syntax: rfc822msgid:MESSAGE-ID

Exact match of message-id. Example:

id:<1416902879-17422-1-git-send-email-user@domain.com>

or

id:1416902879-17422-1-git-send-email-user@domain.com

The two prefixes are equivalent.


Search by text

  • Syntax: KEYWORD

Search text keyword in the email message. Example:

regression

AND and OR

  • Syntax: { TERM TERM }
  • Syntax: ( TERM TERM )

Alternatives can be written within braces. The query will match if at least one of the terms matches.

AND is usually obtained just by writing terms next to each other, except inside braces. For this reason you can also explicitly write an "AND" using parentheses.