* [PATCH 0/3] notmuch: Improve handling of attached patches
@ 2021-01-03 18:09 Kyle Meyer
2021-01-03 18:09 ` [PATCH 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Kyle Meyer @ 2021-01-03 18:09 UTC (permalink / raw)
To: piem
I've hit into a few cases where piem-notmuch-am-ready-mbox hasn't been
able to find an attached patch. This series, in particular patch 2,
should improve the situation.
[1/3] piem-notmuch--with-current-message: Declare debug and indent specs
[2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments
[3/3] gnus, notmuch: Absorb now-shared bits into patch attachment helper
piem-gnus.el | 14 ++-----------
piem-notmuch.el | 52 ++++++++++++++++++++++++++-----------------------
piem.el | 21 ++++++++++++--------
3 files changed, 43 insertions(+), 44 deletions(-)
base-commit: 96da1c622caac904e3f60e306847a4e68ca15e0c
--
2.29.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] piem-notmuch--with-current-message: Declare debug and indent specs
2021-01-03 18:09 [PATCH 0/3] notmuch: Improve handling of attached patches Kyle Meyer
@ 2021-01-03 18:09 ` Kyle Meyer
2021-01-03 18:09 ` [PATCH 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments Kyle Meyer
2021-01-03 18:09 ` [PATCH " Kyle Meyer
2 siblings, 0 replies; 9+ messages in thread
From: Kyle Meyer @ 2021-01-03 18:09 UTC (permalink / raw)
To: piem
---
piem-notmuch.el | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/piem-notmuch.el b/piem-notmuch.el
index 361b450..ff8654c 100644
--- a/piem-notmuch.el
+++ b/piem-notmuch.el
@@ -33,6 +33,7 @@ (require 'piem)
(require 'subr-x)
(defmacro piem-notmuch--with-current-message (&rest body)
+ (declare (indent 0) (debug (body)))
(let ((rv (make-symbol "rv")))
`(let (,rv)
(with-current-notmuch-show-message
@@ -43,7 +44,7 @@ (defun piem-notmuch-get-inbox ()
"Return inbox name from a `notmuch-show-mode' buffer."
(when (derived-mode-p 'notmuch-show-mode)
(piem-notmuch--with-current-message
- (piem-inbox-by-header-match))))
+ (piem-inbox-by-header-match))))
(defun piem-notmuch-get-mid ()
"Return the message ID of a `notmuch-show-mode' buffer."
--
2.29.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments
2021-01-03 18:09 [PATCH 0/3] notmuch: Improve handling of attached patches Kyle Meyer
2021-01-03 18:09 ` [PATCH 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
@ 2021-01-03 18:09 ` Kyle Meyer
2021-01-04 1:53 ` Kyle Meyer
2021-01-03 18:09 ` [PATCH " Kyle Meyer
2 siblings, 1 reply; 9+ messages in thread
From: Kyle Meyer @ 2021-01-03 18:09 UTC (permalink / raw)
To: piem
piem-notmuch-am-ready-mbox tries to get attached patches from the
plist returned by notmuch-show-get-message-properties. This works
okay for simple cases, but it doesn't find a patch if the content is
encoded or if the MIME tree isn't structured as expected. Instead use
mm-decode functions to get a list of handles and display their
content.
This new approach, as well as the previous one, probably isn't
compatible with `format-patch --attach' patches, but I'm not going to
worry about that until I actually see such a patch in the wild.
---
piem-notmuch.el | 55 ++++++++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 23 deletions(-)
diff --git a/piem-notmuch.el b/piem-notmuch.el
index ff8654c..94b1fa0 100644
--- a/piem-notmuch.el
+++ b/piem-notmuch.el
@@ -28,6 +28,7 @@
;;; Code:
+(require 'mm-decode)
(require 'notmuch)
(require 'piem)
(require 'subr-x)
@@ -78,29 +79,37 @@ (defun piem-notmuch-am-ready-mbox ()
those parts' contents (in order) as the mbox. Otherwise, use the
message itself if it looks like a patch."
(when (derived-mode-p 'notmuch-show-mode)
- (let ((body (car (plist-get (notmuch-show-get-message-properties)
- :body))))
- (pcase (plist-get body :content-type)
- ((and "text/plain"
- (guard (string-match-p piem-patch-subject-re
- (notmuch-show-get-subject))))
- (let ((id (notmuch-show-get-message-id)))
- (lambda ()
- (call-process notmuch-command nil t nil
- "show" "--format=mbox" id))))
- ("multipart/mixed"
- (when-let ((patches
- (delq nil
- (mapcar (lambda (part)
- (and (piem-am-patch-attachment-p
- (plist-get part :content-type)
- (plist-get part :filename))
- (plist-get part :content)))
- (plist-get body :content)))))
- (cons (lambda ()
- (dolist (patch patches)
- (insert patch)))
- "mbox")))))))
+ (if (string-prefix-p
+ "multipart/"
+ (plist-get
+ (car (plist-get (notmuch-show-get-message-properties)
+ :body))
+ :content-type))
+ (let (patches)
+ (piem-notmuch--with-current-message
+ (notmuch-foreach-mime-part
+ (lambda (p)
+ (and (piem-am-patch-attachment-p
+ (mm-handle-media-type p)
+ (mm-handle-filename p))
+ (with-temp-buffer
+ (mm-display-inline p)
+ (push (buffer-substring-no-properties
+ (point-min) (point-max))
+ patches))))
+ (mm-dissect-buffer)))
+ (when patches
+ (setq patches (nreverse patches))
+ (cons (lambda ()
+ (dolist (patch patches)
+ (insert patch)))
+ "mbox")))
+ (when (string-match-p piem-patch-subject-re
+ (notmuch-show-get-subject))
+ (let ((id (notmuch-show-get-message-id)))
+ (lambda ()
+ (call-process notmuch-command nil t nil
+ "show" "--format=mbox" id)))))))
;;;###autoload
(define-minor-mode piem-notmuch-mode
--
2.29.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments
2021-01-03 18:09 ` [PATCH 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments Kyle Meyer
@ 2021-01-04 1:53 ` Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 0/3] notmuch: Improve handling of attached patches Kyle Meyer
0 siblings, 1 reply; 9+ messages in thread
From: Kyle Meyer @ 2021-01-04 1:53 UTC (permalink / raw)
To: piem
Kyle Meyer writes:
> + (if (string-prefix-p
> + "multipart/"
> + (plist-get
> + (car (plist-get (notmuch-show-get-message-properties)
> + :body))
> + :content-type))
This is problematic for an inline multipart/signed patch (which the
old/current logic doesn't handle properly either). That's not a big
deal, since such a patch can be sent through piem-b4-am-from-mid
instead, but it'd still be nice to support it.
v2 incoming...
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 0/3] notmuch: Improve handling of attached patches
2021-01-04 1:53 ` Kyle Meyer
@ 2021-01-04 1:54 ` Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Kyle Meyer @ 2021-01-04 1:54 UTC (permalink / raw)
To: piem
I've hit into a few cases where piem-notmuch-am-ready-mbox hasn't been
able to find an attached patch. This series, in particular patch 2,
should improve the situation.
v2: Fix handling of inline multipart/signed patches by using the
attachment count rather than the top-level content-type to decide
whether to go down the attachment or inline code path.
[1/3] piem-notmuch--with-current-message: Declare debug and indent specs
[2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments
[3/3] gnus, notmuch: Absorb now-shared bits into patch attachment helper
piem-gnus.el | 14 ++------------
piem-notmuch.el | 49 +++++++++++++++++++++++++------------------------
piem.el | 21 +++++++++++++--------
3 files changed, 40 insertions(+), 44 deletions(-)
Range-diff against v1:
1: f4ff1f1 = 1: f4ff1f1 piem-notmuch--with-current-message: Declare debug and indent specs
2: 8eb290d ! 2: ca8d684 piem-notmuch-am-ready-mbox: Improve handling of attachments
@@ piem-notmuch.el: (defun piem-notmuch-am-ready-mbox ()
- (dolist (patch patches)
- (insert patch)))
- "mbox")))))))
-+ (if (string-prefix-p
-+ "multipart/"
-+ (plist-get
-+ (car (plist-get (notmuch-show-get-message-properties)
-+ :body))
-+ :content-type))
-+ (let (patches)
-+ (piem-notmuch--with-current-message
-+ (notmuch-foreach-mime-part
-+ (lambda (p)
-+ (and (piem-am-patch-attachment-p
-+ (mm-handle-media-type p)
-+ (mm-handle-filename p))
-+ (with-temp-buffer
-+ (mm-display-inline p)
-+ (push (buffer-substring-no-properties
-+ (point-min) (point-max))
-+ patches))))
-+ (mm-dissect-buffer)))
-+ (when patches
-+ (setq patches (nreverse patches))
-+ (cons (lambda ()
-+ (dolist (patch patches)
-+ (insert patch)))
-+ "mbox")))
-+ (when (string-match-p piem-patch-subject-re
-+ (notmuch-show-get-subject))
-+ (let ((id (notmuch-show-get-message-id)))
-+ (lambda ()
-+ (call-process notmuch-command nil t nil
-+ "show" "--format=mbox" id)))))))
++ (let* ((handle (piem-notmuch--with-current-message
++ (mm-dissect-buffer)))
++ (n-attachments (notmuch-count-attachments handle))
++ patches)
++ (if (= n-attachments 0)
++ (when (string-match-p piem-patch-subject-re
++ (notmuch-show-get-subject))
++ (let ((id (notmuch-show-get-message-id)))
++ (lambda ()
++ (call-process notmuch-command nil t nil
++ "show" "--format=mbox" id))))
++ (notmuch-foreach-mime-part
++ (lambda (p)
++ (and (piem-am-patch-attachment-p
++ (mm-handle-media-type p)
++ (mm-handle-filename p))
++ (with-temp-buffer
++ (mm-display-inline p)
++ (push (buffer-substring-no-properties
++ (point-min) (point-max))
++ patches))))
++ handle)
++ (when patches
++ (setq patches (nreverse patches))
++ (cons (lambda ()
++ (dolist (patch patches)
++ (insert patch)))
++ "mbox"))))))
;;;###autoload
(define-minor-mode piem-notmuch-mode
3: 6bbde3b ! 3: ee314a5 gnus, notmuch: Absorb now-shared bits into patch attachment helper
@@ piem-gnus.el: (defun piem-gnus-am-ready-mbox ()
## piem-notmuch.el ##
@@ piem-notmuch.el: (defun piem-notmuch-am-ready-mbox ()
- (piem-notmuch--with-current-message
- (notmuch-foreach-mime-part
- (lambda (p)
-- (and (piem-am-patch-attachment-p
-- (mm-handle-media-type p)
-- (mm-handle-filename p))
-- (with-temp-buffer
-- (mm-display-inline p)
-- (push (buffer-substring-no-properties
-- (point-min) (point-max))
-- patches))))
-+ (when-let ((patch (piem-am-extract-attached-patch p)))
-+ (push patch patches)))
- (mm-dissect-buffer)))
- (when patches
- (setq patches (nreverse patches))
+ "show" "--format=mbox" id))))
+ (notmuch-foreach-mime-part
+ (lambda (p)
+- (and (piem-am-patch-attachment-p
+- (mm-handle-media-type p)
+- (mm-handle-filename p))
+- (with-temp-buffer
+- (mm-display-inline p)
+- (push (buffer-substring-no-properties
+- (point-min) (point-max))
+- patches))))
++ (when-let ((patch (piem-am-extract-attached-patch p)))
++ (push patch patches)))
+ handle)
+ (when patches
+ (setq patches (nreverse patches))
## piem.el ##
@@
base-commit: 96da1c622caac904e3f60e306847a4e68ca15e0c
--
2.29.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/3] piem-notmuch--with-current-message: Declare debug and indent specs
2021-01-04 1:54 ` [PATCH v2 0/3] notmuch: Improve handling of attached patches Kyle Meyer
@ 2021-01-04 1:54 ` Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 3/3] gnus, notmuch: Absorb now-shared bits into patch attachment helper Kyle Meyer
2 siblings, 0 replies; 9+ messages in thread
From: Kyle Meyer @ 2021-01-04 1:54 UTC (permalink / raw)
To: piem
---
piem-notmuch.el | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/piem-notmuch.el b/piem-notmuch.el
index 361b450..ff8654c 100644
--- a/piem-notmuch.el
+++ b/piem-notmuch.el
@@ -33,6 +33,7 @@ (require 'piem)
(require 'subr-x)
(defmacro piem-notmuch--with-current-message (&rest body)
+ (declare (indent 0) (debug (body)))
(let ((rv (make-symbol "rv")))
`(let (,rv)
(with-current-notmuch-show-message
@@ -43,7 +44,7 @@ (defun piem-notmuch-get-inbox ()
"Return inbox name from a `notmuch-show-mode' buffer."
(when (derived-mode-p 'notmuch-show-mode)
(piem-notmuch--with-current-message
- (piem-inbox-by-header-match))))
+ (piem-inbox-by-header-match))))
(defun piem-notmuch-get-mid ()
"Return the message ID of a `notmuch-show-mode' buffer."
--
2.29.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments
2021-01-04 1:54 ` [PATCH v2 0/3] notmuch: Improve handling of attached patches Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
@ 2021-01-04 1:54 ` Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 3/3] gnus, notmuch: Absorb now-shared bits into patch attachment helper Kyle Meyer
2 siblings, 0 replies; 9+ messages in thread
From: Kyle Meyer @ 2021-01-04 1:54 UTC (permalink / raw)
To: piem
piem-notmuch-am-ready-mbox tries to get attached patches from the
plist returned by notmuch-show-get-message-properties. This works
okay for simple cases, but it doesn't find a patch if the content is
encoded or if the MIME tree isn't structured as expected. Instead use
mm-decode functions to get a list of handles and display their
content.
This new approach, as well as the previous one, probably isn't
compatible with `format-patch --attach' patches, but I'm not going to
worry about that until I actually see such a patch in the wild.
---
piem-notmuch.el | 52 +++++++++++++++++++++++++++----------------------
1 file changed, 29 insertions(+), 23 deletions(-)
diff --git a/piem-notmuch.el b/piem-notmuch.el
index ff8654c..915675e 100644
--- a/piem-notmuch.el
+++ b/piem-notmuch.el
@@ -28,6 +28,7 @@
;;; Code:
+(require 'mm-decode)
(require 'notmuch)
(require 'piem)
(require 'subr-x)
@@ -78,29 +79,34 @@ (defun piem-notmuch-am-ready-mbox ()
those parts' contents (in order) as the mbox. Otherwise, use the
message itself if it looks like a patch."
(when (derived-mode-p 'notmuch-show-mode)
- (let ((body (car (plist-get (notmuch-show-get-message-properties)
- :body))))
- (pcase (plist-get body :content-type)
- ((and "text/plain"
- (guard (string-match-p piem-patch-subject-re
- (notmuch-show-get-subject))))
- (let ((id (notmuch-show-get-message-id)))
- (lambda ()
- (call-process notmuch-command nil t nil
- "show" "--format=mbox" id))))
- ("multipart/mixed"
- (when-let ((patches
- (delq nil
- (mapcar (lambda (part)
- (and (piem-am-patch-attachment-p
- (plist-get part :content-type)
- (plist-get part :filename))
- (plist-get part :content)))
- (plist-get body :content)))))
- (cons (lambda ()
- (dolist (patch patches)
- (insert patch)))
- "mbox")))))))
+ (let* ((handle (piem-notmuch--with-current-message
+ (mm-dissect-buffer)))
+ (n-attachments (notmuch-count-attachments handle))
+ patches)
+ (if (= n-attachments 0)
+ (when (string-match-p piem-patch-subject-re
+ (notmuch-show-get-subject))
+ (let ((id (notmuch-show-get-message-id)))
+ (lambda ()
+ (call-process notmuch-command nil t nil
+ "show" "--format=mbox" id))))
+ (notmuch-foreach-mime-part
+ (lambda (p)
+ (and (piem-am-patch-attachment-p
+ (mm-handle-media-type p)
+ (mm-handle-filename p))
+ (with-temp-buffer
+ (mm-display-inline p)
+ (push (buffer-substring-no-properties
+ (point-min) (point-max))
+ patches))))
+ handle)
+ (when patches
+ (setq patches (nreverse patches))
+ (cons (lambda ()
+ (dolist (patch patches)
+ (insert patch)))
+ "mbox"))))))
;;;###autoload
(define-minor-mode piem-notmuch-mode
--
2.29.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 3/3] gnus, notmuch: Absorb now-shared bits into patch attachment helper
2021-01-04 1:54 ` [PATCH v2 0/3] notmuch: Improve handling of attached patches Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments Kyle Meyer
@ 2021-01-04 1:54 ` Kyle Meyer
2 siblings, 0 replies; 9+ messages in thread
From: Kyle Meyer @ 2021-01-04 1:54 UTC (permalink / raw)
To: piem
With the previous commit, -notmuch more closely follows -gnus in its
handling of attachments (e.g., getting the content with
mm-display-inline). Replace piem-am-patch-attachment-p with a helper
that has this shared logic.
---
piem-gnus.el | 14 ++------------
piem-notmuch.el | 10 ++--------
piem.el | 21 +++++++++++++--------
3 files changed, 17 insertions(+), 28 deletions(-)
diff --git a/piem-gnus.el b/piem-gnus.el
index c6b9d0c..5f10be8 100644
--- a/piem-gnus.el
+++ b/piem-gnus.el
@@ -66,18 +66,8 @@ (defun piem-gnus-am-ready-mbox ()
(when (derived-mode-p 'gnus-article-mode 'gnus-summary-mode)
(cond
(gnus-article-mime-handles
- (when-let ((patches
- (delq nil
- (mapcar (lambda (handle)
- (and (listp handle)
- (piem-am-patch-attachment-p
- (mm-handle-media-type handle)
- (mm-handle-filename handle))
- (with-temp-buffer
- (mm-display-inline handle)
- (buffer-substring-no-properties
- (point-min) (point-max)))))
- gnus-article-mime-handles))))
+ (when-let ((patches (delq nil (mapcar #'piem-am-extract-attached-patch
+ gnus-article-mime-handles))))
(cons (lambda ()
(dolist (patch patches)
(insert patch)))
diff --git a/piem-notmuch.el b/piem-notmuch.el
index 915675e..37e695b 100644
--- a/piem-notmuch.el
+++ b/piem-notmuch.el
@@ -92,14 +92,8 @@ (defun piem-notmuch-am-ready-mbox ()
"show" "--format=mbox" id))))
(notmuch-foreach-mime-part
(lambda (p)
- (and (piem-am-patch-attachment-p
- (mm-handle-media-type p)
- (mm-handle-filename p))
- (with-temp-buffer
- (mm-display-inline p)
- (push (buffer-substring-no-properties
- (point-min) (point-max))
- patches))))
+ (when-let ((patch (piem-am-extract-attached-patch p)))
+ (push patch patches)))
handle)
(when patches
(setq patches (nreverse patches))
diff --git a/piem.el b/piem.el
index bf79813..8c23e7b 100644
--- a/piem.el
+++ b/piem.el
@@ -40,6 +40,7 @@
(require 'cl-lib)
(require 'mail-extr)
(require 'message)
+(require 'mm-decode)
(require 'piem-maildir)
(require 'rfc2047)
(require 'subr-x)
@@ -573,14 +574,18 @@ (defun piem-inject-thread-into-maildir (mid &optional message-only)
\f
;;;; Patch handling
-(defun piem-am-patch-attachment-p (type filename)
- "Return non-nil if an attachment should be treated as a patch.
-TYPE is a media type such as \"text/x-patch\". FILENAME is the
-attachment file name, if any."
- (or (member type '("text/x-diff" "text/x-patch"))
- (and filename
- (equal type "text/plain")
- (string-match-p "\\.patch\\'" filename))))
+(defun piem-am-extract-attached-patch (handle)
+ "Return content for HANDLE if it looks like a patch."
+ (and (listp handle)
+ (let ((type (mm-handle-media-type handle))
+ (filename (mm-handle-filename handle)))
+ (or (member type '("text/x-diff" "text/x-patch"))
+ (and filename
+ (equal type "text/plain")
+ (string-match-p "\\.patch\\'" filename))))
+ (with-temp-buffer
+ (mm-display-inline handle)
+ (buffer-substring-no-properties (point-min) (point-max)))))
(defun piem-extract-mbox-info (&optional buffer)
"Collect information from message in BUFFER.
--
2.29.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/3] gnus, notmuch: Absorb now-shared bits into patch attachment helper
2021-01-03 18:09 [PATCH 0/3] notmuch: Improve handling of attached patches Kyle Meyer
2021-01-03 18:09 ` [PATCH 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
2021-01-03 18:09 ` [PATCH 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments Kyle Meyer
@ 2021-01-03 18:09 ` Kyle Meyer
2 siblings, 0 replies; 9+ messages in thread
From: Kyle Meyer @ 2021-01-03 18:09 UTC (permalink / raw)
To: piem
With the previous commit, -notmuch more closely follows -gnus in its
handling of attachments (e.g., getting the content with
mm-display-inline). Replace piem-am-patch-attachment-p with a helper
that has this shared logic.
---
piem-gnus.el | 14 ++------------
piem-notmuch.el | 10 ++--------
piem.el | 21 +++++++++++++--------
3 files changed, 17 insertions(+), 28 deletions(-)
diff --git a/piem-gnus.el b/piem-gnus.el
index c6b9d0c..5f10be8 100644
--- a/piem-gnus.el
+++ b/piem-gnus.el
@@ -66,18 +66,8 @@ (defun piem-gnus-am-ready-mbox ()
(when (derived-mode-p 'gnus-article-mode 'gnus-summary-mode)
(cond
(gnus-article-mime-handles
- (when-let ((patches
- (delq nil
- (mapcar (lambda (handle)
- (and (listp handle)
- (piem-am-patch-attachment-p
- (mm-handle-media-type handle)
- (mm-handle-filename handle))
- (with-temp-buffer
- (mm-display-inline handle)
- (buffer-substring-no-properties
- (point-min) (point-max)))))
- gnus-article-mime-handles))))
+ (when-let ((patches (delq nil (mapcar #'piem-am-extract-attached-patch
+ gnus-article-mime-handles))))
(cons (lambda ()
(dolist (patch patches)
(insert patch)))
diff --git a/piem-notmuch.el b/piem-notmuch.el
index 94b1fa0..07f17d4 100644
--- a/piem-notmuch.el
+++ b/piem-notmuch.el
@@ -89,14 +89,8 @@ (defun piem-notmuch-am-ready-mbox ()
(piem-notmuch--with-current-message
(notmuch-foreach-mime-part
(lambda (p)
- (and (piem-am-patch-attachment-p
- (mm-handle-media-type p)
- (mm-handle-filename p))
- (with-temp-buffer
- (mm-display-inline p)
- (push (buffer-substring-no-properties
- (point-min) (point-max))
- patches))))
+ (when-let ((patch (piem-am-extract-attached-patch p)))
+ (push patch patches)))
(mm-dissect-buffer)))
(when patches
(setq patches (nreverse patches))
diff --git a/piem.el b/piem.el
index bf79813..8c23e7b 100644
--- a/piem.el
+++ b/piem.el
@@ -40,6 +40,7 @@
(require 'cl-lib)
(require 'mail-extr)
(require 'message)
+(require 'mm-decode)
(require 'piem-maildir)
(require 'rfc2047)
(require 'subr-x)
@@ -573,14 +574,18 @@ (defun piem-inject-thread-into-maildir (mid &optional message-only)
\f
;;;; Patch handling
-(defun piem-am-patch-attachment-p (type filename)
- "Return non-nil if an attachment should be treated as a patch.
-TYPE is a media type such as \"text/x-patch\". FILENAME is the
-attachment file name, if any."
- (or (member type '("text/x-diff" "text/x-patch"))
- (and filename
- (equal type "text/plain")
- (string-match-p "\\.patch\\'" filename))))
+(defun piem-am-extract-attached-patch (handle)
+ "Return content for HANDLE if it looks like a patch."
+ (and (listp handle)
+ (let ((type (mm-handle-media-type handle))
+ (filename (mm-handle-filename handle)))
+ (or (member type '("text/x-diff" "text/x-patch"))
+ (and filename
+ (equal type "text/plain")
+ (string-match-p "\\.patch\\'" filename))))
+ (with-temp-buffer
+ (mm-display-inline handle)
+ (buffer-substring-no-properties (point-min) (point-max)))))
(defun piem-extract-mbox-info (&optional buffer)
"Collect information from message in BUFFER.
--
2.29.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-01-04 1:54 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-03 18:09 [PATCH 0/3] notmuch: Improve handling of attached patches Kyle Meyer
2021-01-03 18:09 ` [PATCH 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
2021-01-03 18:09 ` [PATCH 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments Kyle Meyer
2021-01-04 1:53 ` Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 0/3] notmuch: Improve handling of attached patches Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 1/3] piem-notmuch--with-current-message: Declare debug and indent specs Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 2/3] piem-notmuch-am-ready-mbox: Improve handling of attachments Kyle Meyer
2021-01-04 1:54 ` [PATCH v2 3/3] gnus, notmuch: Absorb now-shared bits into patch attachment helper Kyle Meyer
2021-01-03 18:09 ` [PATCH " Kyle Meyer
Code repositories for project(s) associated with this public inbox
https://git.kyleam.com/piem/
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).