From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 26188 invoked from network); 22 Dec 2021 21:20:31 -0000 Received: from lists.gnu.org (209.51.188.17) by inbox.vuxu.org with ESMTPUTF8; 22 Dec 2021 21:20:31 -0000 Received: from localhost ([::1]:45388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n092E-0003SE-IW for ml@inbox.vuxu.org; Wed, 22 Dec 2021 16:20:30 -0500 Received: from eggs.gnu.org ([209.51.188.92]:49020) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n091p-0003S3-HP for info-gnus-english@gnu.org; Wed, 22 Dec 2021 16:20:05 -0500 Received: from ciao.gmane.io ([116.202.254.214]:44396) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n091n-0003fF-SE for info-gnus-english@gnu.org; Wed, 22 Dec 2021 16:20:05 -0500 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1n091l-000ASR-Ln for info-gnus-english@gnu.org; Wed, 22 Dec 2021 22:20:01 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: info-gnus-english@gnu.org From: Eric Abrahamsen Subject: Re: gnus-search-engine set to gnus-search-notmuch and refer threads Date: Wed, 22 Dec 2021 13:19:11 -0800 Message-ID: <87fsqk8hio.fsf@ericabrahamsen.net> References: <87lf1k11ed.fsf@onenetbeyond.org> <877dd4rmof.fsf@gnus.jao.io> <87wnk6q2ym.fsf@onenetbeyond.org> <87y24ebiw8.fsf@ust.hk> <87pmpoqrxz.fsf@gnus.jao.io> <87k0fw8hmn.fsf@ericabrahamsen.net> Mime-Version: 1.0 Content-Type: text/plain User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) Cancel-Lock: sha1:Ze2+XBpMCdrTPsZZah6r8zYDqSk= Received-SPF: pass client-ip=116.202.254.214; envelope-from=gegu-info-gnus-english@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: info-gnus-english@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Announcements and discussions for GNUS, the GNU Emacs Usenet newsreader \(in English\)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: info-gnus-english-bounces+ml=inbox.vuxu.org@gnu.org Sender: "info-gnus-english" Eric Abrahamsen writes: > "Jose A. Ortega Ruiz" writes: > >> On Tue, Dec 21 2021, Andrew Cohen wrote: >> >>>>>>>> "dal-blazej" == dal-blazej writes: >>> >>> [...] >>> >>> dal-blazej> To reproduce the issue : >>> >>> dal-blazej> 1. In the *server* buffer, use >>> dal-blazej> `gnus-group-read-ephemeral-search-group' with the query >>> dal-blazej> "from:jao@gnu.org" >>> >>> dal-blazej> 2. The first search succeed ; *in the ephemeral search >>> dal-blazej> buffer*, now use `gnus-summary-refer-thread' on an >>> dal-blazej> article. I get: (wrong-type-argument listp "") >>> >>> I don't know if this is related but I just fixed a rather rare bug in >>> thread referral on master (it happens when the subject of the message on >>> which you initiate the thread referral is nearly empty). >>> >>> You might give this a try to see if it fixes your problem. >> >> I've just been able to reproduce the problem in latest master, so i am >> afraid the answer is no :) This is the beginning of the backtrace I get >> when A T in a nnselect buffer (with notmuch as its engine): >> >> Debugger entered--Lisp error: (wrong-type-argument listp "") >> alist-get(parsed-query "") >> #f(compiled-function (engine query-spec) #)(# "") >> apply(#f(compiled-function (engine query-spec) #) # "") >> gnus-search-make-query-string(# "") >> #f(compiled-function (engine server query groups) "Run QUERY against >> SERVER using ENGINE.\nThis method is common to all indexed search >> engines.\n\nReturns a list of [group article score] vectors." >> #)(#> gnus-search-notmuch-1556d745508e> "nnml:" "" nil) >> apply(#f(compiled-function (engine server query groups) "Run QUERY >> against SERVER using ENGINE.\nThis method is common to all indexed >> search engines.\n\nReturns a list of [group article score] vectors." >> #) (#> gnus-search-notmuch-1556d745508e> "nnml:" "" nil)) >> #f(compiled-function (&rest cnm-args) #> 0x1b59543183000dee>)(#> gnus-search-notmuch-1556d745508e> "nnml:" "" nil) >> #f(compiled-function (cl--cnm engine server query groups) "Handle >> notmuch's thread-search routine." #> 0x1d4ee8fb5ee95069>)(#f(compiled-function (&rest cnm-args) #> 0x1b59543183000dee>) #> gnus-search-notmuch-1556d745508e> "nnml:" ((parsed-query (or (id . >> "CAAwB6VDPO=pT-XU8cPNfZRtxXC48LD-OXepiGejb-+QAzoymm...") (or (id . >> "t7sEZR5CwAuextCqAQyuzZ4N-BAsbVMaKTaGiG6o56GNhGyz0U...") (or (id . >> "Ivxz0PU9N9S5LLCmCuI5-UE8pt2AVamHqzLc3LibJxLdYCvo1X...") (or (id . >> "a2wBK5wGXfG6kT2lSke4Mmqc14JC2SLMqP2nsMxZAizapFFBuH...") (id . >> "V00BOpL5XPuHuS_tIuCyc-9zxFq7mR1gLUgK-BhIUZjJOXoFdr...")))))) (query . >> "id:> nil) > > This is a bit hard to look at, but it seems like the problem is in > notmuch's thread-specific search handling. What is supposed to happen > is that notmuch first uses those message-ids to find the messages, then > finds the thread: statements for all of the search results, then does > *another* search using the thread ids from the first search. So > obviously something's going wrong with that. The relevant method is > currently line 1589 in gnus-search.el, I'm also pasting it below. Would > you mind edebugging it and stepping through to see which part exactly is > wrong? > > Thanks. > > (cl-defmethod gnus-search-run-search :around ((engine gnus-search-notmuch) > server query groups) > "Handle notmuch's thread-search routine." > ;; Notmuch allows for searching threads, but only using its own > ;; thread ids. That means a thread search is a \"double-bounce\": > ;; once to find the relevant thread ids, and again to find the > ;; actual messages. This method performs the first \"bounce\". > (if (alist-get 'thread query) > (with-slots (program proc-buffer) engine > (let* ((qstring > (gnus-search-make-query-string engine query)) > (cp-list (gnus-search-indexed-search-command > engine qstring query groups)) > thread-ids proc) > (set-buffer proc-buffer) > (erase-buffer) > (setq proc (apply #'start-process (format "search-%s" server) > proc-buffer program cp-list)) > (while (process-live-p proc) > (accept-process-output proc)) My guess is that we need to go to point-min right here. > (while (re-search-forward "^thread:\\([^ ]+\\)" (point-max) t) > (push (match-string 1) thread-ids)) > (cl-call-next-method > engine server > ;; Completely replace the query with our new thread-based one. > (mapconcat (lambda (thrd) (concat "thread:" thrd)) > thread-ids " or ") > nil))) > (cl-call-next-method engine server query groups)))