From: Austin Clements <amdragon@MIT.EDU>
To: Mark Walters <markwalters1009@gmail.com>
Cc: notmuch@notmuchmail.org
Subject: Re: [PATCH v2] emacs: show: lazy part bugfix
Date: Wed, 4 Sep 2013 10:56:39 -0400 [thread overview]
Message-ID: <20130904145639.GB1426@mit.edu> (raw)
In-Reply-To: <1378279835-28288-1-git-send-email-markwalters1009@gmail.com>
Quoth Mark Walters on Sep 04 at 8:30 am:
> The lazy part handling had a subtle bug. Notmuch stores the part
> information as a text property with the displayed part so attachment
> handling (saving viewing etc work).
s/ work)/) work/
>
> Now, some mime parts have subparts and to avoid overwriting the
> sub-part data notmuch checks and if part data is already recorded it
> does not overwrite it.
>
> Now with lazy part handling this could fail: there is already part
> data stored. In the common case it works as the part type information
> was stored when the lazy-part button was inserted. However, this fails
> if the lazy part has sub-parts: notmuch had no idea these existed
> until the lazy part insertion.
This says that things fail when a lazy part has sub-parts, but not
what the failure is. What is the failure? Can you give a specific
sequence of events and conditions that leads to and demonstrates the
failure?
(I ask not just for commit posterity, but because I actually don't
know, though I may have figured it out after writing the comment
below.)
> We fix this by removing any existing part-information from the
> relevant region before doing the lazy insertion.
> ---
> This is the same as the previous patch
> id:1377246875-7784-1-git-send-email-markwalters1009@gmail.com except I
> have added a substantial comment. I now believe the +1 in the remove
> part information is genuinely correct for the reason detailed in the comment.
>
> This does seem to fix an actual bug (see parent message and links there).
>
> Best wishes
>
> Mark
>
>
> emacs/notmuch-show.el | 13 +++++++++++++
> 1 files changed, 13 insertions(+), 0 deletions(-)
>
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index 20844f0..58ef4df 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -852,7 +852,20 @@ message at DEPTH in the current thread."
> ;; from a message header etc) so instead we start from the last
> ;; character of the button by adding a newline and finish by
> ;; removing the extra newline from the end of the part.
> + ;;
> + ;; Essentially, this function wants text properties to be
> + ;; front-nonsticky (where most of the other functions need
> + ;; front-sticky so that is what they actually are) and this is a way
> + ;; of faking the front-nonsticky for this one function.
Most properties are rear-sticky and front-nonsticky. Maybe this is
referring specifically to :notmuch-part, which is the other way
around?
> + ;;
> + ;; For exactly this reason we also remove existing part-information
> + ;; from one extra character: this extra character is the newline
> + ;; that we delete at the end.
This comment doesn't say what the root of the problem is. Is the
following accurate?
;; First, eliminate the :notmuch-part property from the region we'll
;; be inserting this part in, since we never override an existing
;; :notmuch-part property. If we're inserting a leaf part, it will
;; re-apply the same :notmuch-part, but if this isn't a leaf, the
;; children need to apply different :notmuch-part values.
;; :notmuch-part was originally applied to the newline following the
;; button as well, so remove it from that character, too. (If we
;; didn't remove it from the newline, this would all be for naught:
;; :notmuch-part is front-sticky and we insert the part immediately
;; before this newline, so the part would inherit :notmuch-part from
;; the newline.)
> +
> (save-excursion
> + ;; Remove part-information from lazy part-region
> + (put-text-property (button-start button) (1+ (button-end button)) :notmuch-part nil)
> +
> (goto-char (button-end button))
> (insert "\n")
> (let* ((inhibit-read-only t)
next prev parent reply other threads:[~2013-09-04 14:56 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-23 8:34 [PATCH] emacs: show: lazy part bugfix Mark Walters
2013-09-01 16:18 ` Jameson Graef Rollins
2013-09-04 7:30 ` [PATCH v2] " Mark Walters
2013-09-04 14:56 ` Austin Clements [this message]
2013-09-04 15:50 ` Jameson Graef Rollins
2013-09-04 16:16 ` Austin Clements
2013-09-05 18:46 ` Mark Walters
2013-09-06 23:28 ` [PATCH] emacs: show: lazy part handling bugfix Mark Walters
2013-09-09 13:56 ` Austin Clements
2013-09-10 11:14 ` David Bremner
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
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130904145639.GB1426@mit.edu \
--to=amdragon@mit.edu \
--cc=markwalters1009@gmail.com \
--cc=notmuch@notmuchmail.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.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
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 read-only IMAP folder(s) and NNTP newsgroup(s).