Announcements and discussions for Gnus, the GNU Emacs Usenet newsreader
 help / color / mirror / Atom feed
From: Kai von Fintel <fintel@mit.edu>
To: info-gnus-english@gnu.org
Subject: Re: Finding message by ID fails when message not visible
Date: Sat, 19 Dec 2015 11:07:10 -0500	[thread overview]
Message-ID: <m2egeiifrl.fsf@mit.edu> (raw)
In-Reply-To: <878u4rrwvb.fsf@ericabrahamsen.net>

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> Kai von Fintel <fintel@mit.edu> writes:
>
>> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>>
>>> Kai von Fintel <fintel@mit.edu> writes:
>>>
>>>> Kai von Fintel <fintel@mit.edu> writes:
>>>>
>>>>> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>>>>>
>>>>>> Kai von Fintel <fintel@mit.edu> writes:
>>>>>>
>>>>>>> I'm puzzled by the following behavior: if I search in an 
>>>>>>> nnimap group
>>>>>>> for a message with a particular message-ID, the search 
>>>>>>> fails unless the
>>>>>>> message is visible. If for example, only new messages are 
>>>>>>> shown, the
>>>>>>> search for an old message with a particular ID fails but 
>>>>>>> the same
>>>>>>> message is found when "/o" has made the old messages 
>>>>>>> appear.
>>>>>>>
>>>>>>> This is relevant because I use links to gnus messages from 
>>>>>>> org-mode and
>>>>>>> more often than not the link fails: I get taken to the 
>>>>>>> nnimap group that
>>>>>>> contains the message, but I get the error "No such article 
>>>>>>> (may have
>>>>>>> expired or been canceled)", even though the message is in 
>>>>>>> fact in the
>>>>>>> group.
>>>>>>>
>>>>>>> I suppose org-gnus.el might have to be amended to work 
>>>>>>> around this, but
>>>>>>> first I'd like to understand whether this is expected 
>>>>>>> behavior in gnus.
>>>>>>>
>>>>>>> Can anybody enlighten me or help me trouble-shoot this?
>>>>>>
>>>>>> No, it's not expected, and I haven't seen it before -- 
>>>>>> sorry for the
>>>>>> unhelpful reply! I just tried it (dovecot imap server), and 
>>>>>> it worked
>>>>>> both with and without angle brackets on the ID (sometimes 
>>>>>> brackets can
>>>>>> be an issue).
>>>>>>
>>>>>> To be sure everyone's on the same page, how exactly are you 
>>>>>> searching?
>>>>>> If you're in the *Group* buffer and you hit "G G" on the 
>>>>>> group, and
>>>>>> paste in the message ID, is the message found? If you're 
>>>>>> already in the
>>>>>> *Summary* buffer, there isn't really any way to "search" as 
>>>>>> such,
>>>>>> there's only "limiting" what messages are shown by some 
>>>>>> criteria -- in
>>>>>> those cases it's true you won't be able to get to unseen 
>>>>>> messages.
>>>>>>
>>>>>> But that should never affect following links from org 
>>>>>> mode...
>>>>>>
>>>>>> Eric
>>>>>
>>>>> Thanks for the reply, Eric. More details then.
>>>>>
>>>>> 1. GG in the group buffer works (after a brief delay, 
>>>>> displaying
>>>>> "Opening server FastmailLocal" and then "Searching
>>>>> nnimap+FastmailLocal:Archive...done").
>>>>>
>>>>> 2. M-^ ("Fetch article with id ...) in the summary buffer 
>>>>> (a) works when
>>>>> the message is visible, (b) fails when the message isn't 
>>>>> visible (with
>>>>> "No such article (may have expired or been canceled)").
>>>>>
>>>>> 3. When I follow the org link, say
>>>>> "gnus:nnimap+FastmailLocal:Archive#56614DE9.5030300@upf.edu", 
>>>>> I do get
>>>>> taken to the right nnimap group in gnus but the article is 
>>>>> not displayed
>>>>> (again, with "No such article (may have expired or been 
>>>>> canceled)").
>>>>>
>>>>> One funny thing is that when the "search" fails (in both 
>>>>> cases 2b and
>>>>> 3), the article summary actually is visible (see screenshot:
>>>>> https://www.dropbox.com/s/b1b9mxi7bl0a51j/missing-article.jpg?dl=0)
>>>>>
>>>>> If 1 and 2 are as expected, then I guess the issue is with 
>>>>> org-gnus and
>>>>> how it interacts with my IMAP set-up (offlineimap + dovecot 
>>>>> + nnimap)?
>>>>>
>>>>> -- Kai.
>>>>
>>>> Some more follow-up. I tried to understand the code in 
>>>> org-gnus.el and
>>>> org-sum.el. It appears that the functions "org-gnus-open" and
>>>> "org-gnus-follow-link" call the function 
>>>> "gnus-summary-goto-article"
>>>> from gnus-sum.el. The latter is called with the optional 
>>>> arguments "nil"
>>>> and "t". The last one is supposed to force that all articles 
>>>> are loaded,
>>>> but that doesn't seem to happen.
>>>>
>>>> When I call (gnus-summary-goto-article 
>>>> "56614DE9.5030300@upf.edu" nil t)
>>>> in the summary buffer of the relevant group, it finds the 
>>>> message when
>>>> it is listed and doesn't find it if the buffer has only the 
>>>> first 200
>>>> articles (loading all articles with "/o" then makes the 
>>>> function
>>>> succeed).
>>>>
>>>> I added (gnus-large-newsgroup nil) to the group parameters, 
>>>> which then
>>>> loads all articles when entering the group, and
>>>> (gnus-summary-goto-article "56614DE9.5030300@upf.edu" nil t) 
>>>> then
>>>> succeeds in the summary buffer.
>>>>
>>>> However, the gnus link still doesn't work from outside gnus. 
>>>> It's as if
>>>> the FORCE optional argument that is given to 
>>>> "gnus-summary-goto-article"
>>>> has no effect.
>>>
>>> I've got the same setup as you (Gnus and local dovecot), but 
>>> perhaps the
>>> versions are different? Can you tell us your versions for Gnus 
>>> and Org?
>>>
>>> When I step through `gnus-summary-goto-article', searching for 
>>> a message
>>> ID that is *not* currently display, the "force" argument never 
>>> even
>>> comes into play. I end up in this branch:
>>>
>>> (if (and (stringp article)
>>> 	       (string-match "@\\|%40" article))
>>> 	  (gnus-summary-refer-article article)
>>>
>>> So then on to `gnus-summary-refer-article' (no force argument 
>>> used), and
>>> in that function I end up in the "t" branch of the "cond" 
>>> later on, and
>>> eventually into "(gnus-summary-insert-subject message-id)". 
>>> Then that
>>> leads to "(gnus-read-header id)", and all is well.
>>>
>>> I know this is tedious, but would you mind stepping through 
>>> with edebug
>>> and seeing where things fall apart? My off-the-cuff guess is 
>>> that you're
>>> using an older version of Gnus where the nnimap backend isn't 
>>> quite all
>>> put together...
>>>
>>> If you aren't comfortable with edebug let me know and I can 
>>> provide
>>> exact instructions. It's a very useful thing to know!
>>>
>>> Eric
>>
>> #### System Info
>> - OS: darwin
>> - Emacs: 24.5.1
>> - Gnus: v5.13
>>
>> Well, that was fun ... sort of. I found something I can tweak 
>> to make it
>> work, but I'm not clear on why this issue arises.
>>
>> At the relevant point, the article id is 
>> "<56614DE9.5030300@upf.edu>"
>> (the <> having been added by gnus-summary-refer-article) and 
>> the group
>> is "nnimap+FastmailLocal:Archive".
>>
>> In `gnus-request-head (article group)', a funcall to 
>> `nnimap-request-head'
>> is constructed. Because `gnus-override-method' at that point 
>> contains a long
>> construct `(nnimap "FastmailLocal" ...)', the group argument of 
>> the call
>> to nnimap-request-head is set to nil rather than to "Archive". 
>> I take
>> it, the idea is that nnimap should be able to return the 
>> correct group
>> on its own?
>>
>> The relevant code (in gnus-int.el) is
>>
>> (setq res (funcall head article
>>                          (and (not gnus-override-method)
>>                               (gnus-group-real-name group))
>>        (nth 1 gnus-command-method)))
>>
>> Now, `nnimap-request-head (article nil "FastmailLocal")' 
>> returns "(nil .
>> 277)". I believe the "nil" in that cons should be the group 
>> ("Archive").
>> Maybe that's a problem in nnimap.el but looking at the code I 
>> don't see
>> how it could ever return anything other than nil.
>>
>> From that point on, the group info seems lost and the message 
>> can't be
>> targeted.
>>
>> If I revert the commit to gnus-int.el that introduced the 
>> override
>> method thingy
>> (http://git.gnus.org/cgit/gnus.git/commit/?id=8ba1cd0b96466a96265ec5336728519aa6030d83),
>> to the following instead of what's above:
>>
>> (setq res (funcall head article (gnus-group-real-name group)
>> 			 (nth 1 gnus-command-method))))
>>
>> my messages get found because the actual group is passed on to
>> nnimap-request-head.
>>
>> So, I have things working to a certain degree, but I'm utterly 
>> confused
>> about why this is happening.
>>
>> Can you see from this what the problem is?
>
> My guess is it might just be time to update Gnus. Nnimap has 
> undergone a
> lot of changes over the past couple of years, as has the rest of 
> Gnus,
> and while the versioning system has always confused me, I'm 
> pretty sure
> v5.13 is several years old. The code branches you seem to be 
> following
> don't match up with what I'm seeing (in git master, aka Ma 
> Gnus), and
> it's probably not worth trying to figure out exactly what's 
> going on. I
> find Ma Gnus pretty stable -- would you be willing to run from 
> git?
>
> Eric

OK, I switched to Ma Gnus from git master (`gnu-version' now 
reports "Ma
Gnus v0.14)").

No luck, same issue. And reverting `gnus-request-head' in 
gnus-int.el to
the version without gnus-override-method makes the links work. I 
will
run through it all again with edebug (which unfortunately is 
super-slow
here) over the holiday break and see whether I can determine more
precisely where my installation fails. I'm very puzzled that your 
pretty
much identical set-up works.

-- Kai.



  reply	other threads:[~2015-12-19 16:07 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-15 22:37 Kai von Fintel
2015-12-16  0:28 ` Eric Abrahamsen
2015-12-16  1:43   ` Kai von Fintel
2015-12-16 15:34     ` Kai von Fintel
2015-12-17  2:08       ` Eric Abrahamsen
2015-12-17 18:56         ` Kai von Fintel
2015-12-18 14:34           ` Eric Abrahamsen
2015-12-19 16:07             ` Kai von Fintel [this message]
2015-12-20  3:28               ` Eric Abrahamsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2egeiifrl.fsf@mit.edu \
    --to=fintel@mit.edu \
    --cc=info-gnus-english@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).