emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] ob-core: Avoid table conversion warning for empty results


From: Kyle Meyer
Subject: [PATCH] ob-core: Avoid table conversion warning for empty results
Date: Sat, 29 Aug 2020 13:22:48 -0400

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>
<878se3nhbj.fsf@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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]