# Linux Kernel Toolings - `lei` [TOC] ## Quick Note ### The Xapian query syntax The `leq q` is the command to query the mailing list. You may find its syntax in [public-inbox help](https://lore.kernel.org/all/_/text/help/#search) for any mailing list: ``` search ------ This public-inbox has search functionality provided by Xapian. It supports typical AND, OR, NOT, '+', '-' queries present in other search engines. We also support search prefixes to limit the scope of the search to certain fields. Prefixes supported in this installation include: s: match within Subject e.g. s:"a quick brown fox" d: match date-time range, git "approxidate" formats supported Open-ended ranges such as `d:last.week..' and `d:..2.days.ago' are supported b: match within message body, including text attachments nq: match non-quoted text within message body q: match quoted text within message body n: match filename of attachment(s) t: match within the To header c: match within the Cc header f: match within the From header a: match within the To, Cc, and From headers tc: match within the To and Cc headers l: match contents of the List-Id header bs: match within the Subject and body dfn: match filename from diff dfa: match diff removed (-) lines dfb: match diff added (+) lines dfhh: match diff hunk header context (usually a function name) dfctx: match diff context lines dfpre: match pre-image git blob ID dfpost: match post-image git blob ID dfblob: match either pre or post-image git blob ID patchid: match `git patch-id --stable' output rt: match received time, like `d:' if sender's clock was correct forpatchid: the `X-For-Patch-ID' mail header e.g. forpatchid:stable changeid: the `X-Change-ID' mail header e.g. changeid:stable ``` This syntax is called the Sapian query syntax. To get started with it, see [*Getting Started with Xapian*](https://getting-started-with-xapian.readthedocs.io/en/latest/concepts/search/queryparser.html). You can find more detailed semantics in [*Xapian::QueryParser Syntax*](https://xapian.org/docs/queryparser.html). Also, sometimes you may notice a querying string in the bottom of the page, for example, at the bottom of the [*[PATCH 1/2] drm/amdgpu: move error log from ring write to commit[PATCH 1/2] drm/amdgpu: move error log from ring write to commit*](https://lore.kernel.org/all/20241003081306.235253-1-sunil.khatri@amd.com/), you see contents like this to help filter out the threads: ``` find likely ancestor, descendant, or conflicting patches for this message: ( dfblob:690976665cf dfblob:05b3480ecec dfblob:f93f5100220 dfblob:af8824e8da4 ) OR ( bs:"[PATCH 1/2] drm/amdgpu: move error log from ring write to commit" ) ``` ## Examples ### Finding mails that have patches about a file ``` $ lei q \ -I https://lore.kernel.org/all/ \ --threads \ '(dfn:include/drm/drm_print.h)' ``` ### Finding mails that have patches about some files `lei` support wildcard to some extent: ``` $ lei q \ -I https://lore.kernel.org/all/ \ --threads \ '(dfn:drivers/gpu/drm/vkms/*)' ``` ### Finding mail from an mail address Finding mail from kernel test robot (`lkp@intel.com`) within the past month, and save it to a directory called `ktestbot`: ``` $ lei q \ -I https://lore.kernel.org/all/ \ --threads \ '(f:lkp@intel.com)' ``` Note that the output shows the query to the Publix Inbox: ``` # /home/f/.local/share/lei/store 0/0 # /usr/bin/curl -Sf -s -d '' https://lore.kernel.org/all/?x=m&t=1&q=(f%3Alkp%40intel.com)+AND+rt%3A1726221626.. ``` And you can actually click into the `https://lore.kernel.org/all/?x=m&t=1&q=(f%3Alkp%40intel.com)+AND+rt%3A1726221626..)` link to see those mails on the mailing list archive website. Do remember include the two trailing dots. ### Match the title Find all mail from `lkp@intel.com` whose title contains `fail`: ``` lei q \ -I https://lore.kernel.org/all/ \ --threads \ '(f:lkp@intel.com") AND (s:"fail")' ``` https://lore.kernel.org/all/?q=%28f%3Alkp%40intel.com%29+AND+%28s%3Afailed%29 ## References ### Other References 1. [*Using lei, b4, and mutt to do kernel development*](https://josefbacik.github.io/kernel/2021/10/18/lei-and-b4.html) 2. [*lore+lei: part 1, getting started*](https://people.kernel.org/monsieuricon/lore-lei-part-1-getting-started) 3. [*lore+lei: part 2, now with IMAP*](https://people.kernel.org/monsieuricon/lore-lei-part-2-now-with-imap) 4. [`lei-q(1)`](https://man.archlinux.org/man/lei-q.1.en) ### [Beginner Linux kernel maintainers toolbox - Krzysztof Kozlowski](https://youtu.be/doUuj1qCggY?si=nIF7xq5Zk7ReZLaN&t=1732) {%youtube doUuj1qCggY %} ### [Doing more with lore and b4 - Konstantin Ryabitsev (34:10 ~ FIN)](https://youtu.be/wTpQYM08_Yg?t=2050) {%youtube wTpQYM08_Yg %}