From: Kyle Meyer <kyle@kyleam.com>
To: Colin Baxter <m43cap@yandex.com>
Cc: emacs-orgmode@gnu.org
Subject: [PATCH] ob-core: Avoid table conversion warning for empty results
Date: Sat, 29 Aug 2020 13:22:48 -0400 [thread overview]
Message-ID: <878sdxtlhz.fsf@kyleam.com> (raw)
In-Reply-To: <87h7slsgit.fsf@kyleam.com>
Kyle Meyer writes:
> Thanks for reporting. The _display_ of this warning starts with my
> 14878f3f9 (ob-core: Display warning on failure to read results,
> 2020-05-21). Here's the associated thread on the mailing list:
> <https://orgmode.org/list/2449663.1588516024@apollo2.minshall.org>.
>
> On that commit's parent (eecee2266), the error is triggered and caught
> in the same way, but "Error reading results: (beginning-of-buffer)" is
> buried in the messages buffer rather than being displayed as a warning.
>
> I'll need to take a closer look at what's going on, though I wouldn't be
> surprised if it's been around for a long time.
This patch would squelch the inappropriate warning you report while not
hiding other warnings.
-- >8 --
Subject: [PATCH] ob-core: Avoid table conversion warning for empty results
* lisp/ob-core.el (org-babel-import-elisp-from-file): Don't try to
convert empty file to a table.
* testing/lisp/test-ob.el (test-ob/import-elisp-from-file): Add tests.
If org-babel-import-elisp-from-file is called with an empty file
(which many ob- libraries do when there are no results), feeding that
to org-table-import leads to a beginning-of-buffer error. Before
14878f3f9 (ob-core: Display warning on failure to read results,
2020-05-21), this error was hard to notice because, after catching it,
it was reported as a quickly buried message. After that commit, it is
displayed as a warning, which is not appropriate for the common and
unproblematic case of empty results.
Avoid the warning by only doing the table conversion if the file has
content. Another option would be to do the table conversion but add a
beginning-of-buffer arm to the surrounding condition-case. However,
that risks swallowing other sources of that error.
Reported-by: Colin Baxter <m43cap@yandex.com>
<https://orgmode.org/list/878se3nhbj.fsf@yandex.com>
---
lisp/ob-core.el | 17 +++++++++++------
testing/lisp/test-ob.el | 28 ++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 578622232..5b79919e8 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -3003,13 +3003,18 @@ (defun org-babel-import-elisp-from-file (file-name &optional separator)
(with-temp-buffer
(condition-case err
(progn
- (org-table-import file-name separator)
+ (insert-file-contents file-name)
(delete-file file-name)
- (delq nil
- (mapcar (lambda (row)
- (and (not (eq row 'hline))
- (mapcar #'org-babel-string-read row)))
- (org-table-to-lisp))))
+ (let ((pmax (point-max)))
+ ;; If the file was empty, don't bother trying to
+ ;; convert the table.
+ (when (> pmax 1)
+ (org-table-convert-region (point-min) pmax separator)
+ (delq nil
+ (mapcar (lambda (row)
+ (and (not (eq row 'hline))
+ (mapcar #'org-babel-string-read row)))
+ (org-table-to-lisp))))))
(error
(display-warning 'org-babel
(format "Error reading results: %S" err)
diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
index afaf13555..580cd7d89 100644
--- a/testing/lisp/test-ob.el
+++ b/testing/lisp/test-ob.el
@@ -2252,6 +2252,34 @@ (ert-deftest test-ob/string-to-number ()
(should (= 0.1 (org-babel--string-to-number "0.1")))
(should (= 1.0 (org-babel--string-to-number "1.0"))))
+(ert-deftest test-ob/import-elisp-from-file ()
+ "Test `org-babel-import-elisp-from-file'."
+ (should
+ (equal
+ (org-test-with-temp-text-in-file "line 1\nline 2\n"
+ (cl-letf (((symbol-function 'display-warning)
+ (lambda (&rest _) (error "No warnings should occur"))
+ (org-table-convert-region-max-lines 2)))
+ (org-babel-import-elisp-from-file (buffer-file-name))))
+ '(("line" 1)
+ ("line" 2))))
+ ;; If an error occurs during table conversion, it is shown with
+ ;; `display-warning' rather than as a message to make sure the
+ ;; caller sees it.
+ (should-error
+ (org-test-with-temp-text-in-file "line 1\nline 2\n"
+ (cl-letf (((symbol-function 'display-warning)
+ (lambda (&rest _) (error "Warning should be displayed")))
+ (org-table-convert-region-max-lines 1))
+ (org-babel-import-elisp-from-file (buffer-file-name)))))
+ ;; But an empty file (as is the case when there are no execution
+ ;; results) does not trigger a warning.
+ (should-not
+ (org-test-with-temp-text-in-file ""
+ (cl-letf (((symbol-function 'display-warning)
+ (lambda (&rest _) (error "No warnings should occur"))))
+ (org-babel-import-elisp-from-file (buffer-file-name))))))
+
(provide 'test-ob)
;;; test-ob ends here
base-commit: e8ebf5d6c93aaa8f343f897f890deb1304ca9d4b
--
2.28.0
next prev parent reply other threads:[~2020-08-29 17:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-25 10:36 bash babel code gives error Colin Baxter
2020-08-25 10:53 ` Colin Baxter
2020-08-29 13:55 ` Kyle Meyer
2020-08-29 17:22 ` Kyle Meyer [this message]
2020-08-29 19:53 ` [PATCH] ob-core: Avoid table conversion warning for empty results Colin Baxter
2020-08-30 6:53 ` Colin Baxter
2020-09-01 4:04 ` Kyle Meyer
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://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878sdxtlhz.fsf@kyleam.com \
--to=kyle@kyleam.com \
--cc=emacs-orgmode@gnu.org \
--cc=m43cap@yandex.com \
/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://git.savannah.gnu.org/cgit/emacs/org-mode.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).