"Jose A. Ortega Ruiz" <j...@gnu.org> writes:

> On Wed, Dec 22 2021, Eric Abrahamsen wrote:
>
> [...]
>
>> 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)))
>
> it's not enough.  before that, there's a problem with invoking the
> search for threads, because notmuch is passed the flag --duplicate=1,
> and that's not accepted for format thread:
>
>   Error: --duplicate=N is only supported with --output=files and 
> --output=messages.
>
> funny thing is that that flag is added for no apparent reason in line
> 1633 of gnus-search.el:
>
>       "--duplicate=1" ; I have found this necessary, I don't know why.

Hmm, I inherited this code, and didn't know why it was necessary either,
so I didn't take it out. I think notmuch can return multiple search
results if the same message exists in multiple folders, but since we're
filtering folders to begin with, maybe we don't need this.

> i don't know why either because searches seem to work without it :).
> if one eliminates that flag and adds your suggested (goto-char
> (point-min)) we are not out the woods yet: the thread id is read, but
> including an eol, so one needs
>
>   (while (re-search-forward "^thread:\\([^\n ]+\\)" (point-max) t)
>                                          ^^^^

Obviously I was hoping this would Just Work™ without me having to
actually install notmuch and test it.

> and then, we still fail, because that leads, somehow to an error of the
> form:
>
>   Debugger entered--Lisp error: (wrong-type-argument listp 
> "thread:000000000001a830")
>      alist-get(parsed-query "thread:000000000001a830")
>      #f(compiled-function (engine query-spec) #<bytecode 
> 0x1fd1b560df8c2360>)(#<gnus-search-notmuch gnus-search-notmuch-157d5a02af62> 
> "thread:000000000001a830")
>      apply(#f(compiled-function (engine query-spec) #<bytecode 
> 0x1fd1b560df8c2360>) #<gnus-search-notmuch gnus-search-notmuch-157d5a02af62> 
> "thread:000000000001a830")
>      gnus-search-make-query-string(#<gnus-search-notmuch 
> gnus-search-notmuch-157d5a02af62> "thread:000000000001a830")
>
> which indicates that the notmuch method for
> gnus-search-make-query-string is buggy: it doesn't know how to parse
> "thread:000000000001a830" queries...  and here i ran out of steam, but
> the fix seems nearby :)

You have done heroic work, and I hope it may yet be unnecessary for me
to install and configure notmuch. Telling notmuch what to do with
"thread:xxx" queries is not difficult, and I should have a solution for
this in the next day or so.

Thanks for the extensive debugging,
Eric


Reply via email to