[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-30 4af1dc83ae8 1/2: Fix redirecting Eshell output to symbols in so
From: |
Jim Porter |
Subject: |
emacs-30 4af1dc83ae8 1/2: Fix redirecting Eshell output to symbols in some places |
Date: |
Fri, 30 Aug 2024 00:53:57 -0400 (EDT) |
branch: emacs-30
commit 4af1dc83ae8857665162dc4dd05cb5a46e2f9449
Author: Jim Porter <jporterbugs@gmail.com>
Commit: Jim Porter <jporterbugs@gmail.com>
Fix redirecting Eshell output to symbols in some places
Do not merge to master.
* lisp/eshell/esh-io.el (eshell-output-object-to-target): Don't require
TARGET to be bound.
* lisp/eshell/em-script.el (eshell-execute-file): Quote the output/error
targets.
* test/lisp/eshell/em-script-tests.el (eshell-execute-file-output): New
variable.
(em-script-test/execute-file/output-file)
(em-script-test/execute-file/output-symbol): New tests.
* test/lisp/eshell/esh-io-tests.el (eshell-test-file-string): Move to...
* test/lisp/eshell/eshell-tests-helpers.el (eshell-test-file-string):
... here.
---
lisp/eshell/em-script.el | 2 +-
lisp/eshell/esh-io.el | 2 +-
test/lisp/eshell/em-script-tests.el | 18 ++++++++++++++++++
test/lisp/eshell/esh-io-tests.el | 6 ------
test/lisp/eshell/eshell-tests-helpers.el | 6 ++++++
5 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el
index ba020d2eb5b..ebba0440d68 100644
--- a/lisp/eshell/em-script.el
+++ b/lisp/eshell/em-script.el
@@ -119,7 +119,7 @@ Comments begin with `#'."
(eshell-mode)
(eshell-do-eval
`(let ((eshell-current-handles
- (eshell-create-handles ,stdout 'insert))
+ (eshell-create-handles ',stdout 'insert))
(eshell-current-subjob-p))
,(eshell--source-file file args))
t))))
diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el
index 9de9cc4509a..570ace2ebb8 100644
--- a/lisp/eshell/esh-io.el
+++ b/lisp/eshell/esh-io.el
@@ -713,7 +713,7 @@ Returns what was actually sent, or nil if nothing was
sent.")
(cl-defmethod eshell-output-object-to-target (object (target symbol))
"Output OBJECT to the value of the symbol TARGET."
- (if (not (symbol-value target))
+ (if (not (and (boundp target) (symbol-value target)))
(set target object)
(setq object (eshell-stringify object))
(if (not (stringp (symbol-value target)))
diff --git a/test/lisp/eshell/em-script-tests.el
b/test/lisp/eshell/em-script-tests.el
index 86a78e43026..5e5eb80f215 100644
--- a/test/lisp/eshell/em-script-tests.el
+++ b/test/lisp/eshell/em-script-tests.el
@@ -33,6 +33,9 @@
(expand-file-name "eshell-tests-helpers"
(file-name-directory (or load-file-name
default-directory))))
+
+(defvar eshell-execute-file-output)
+
;;; Tests:
(ert-deftest em-script-test/source-script ()
@@ -113,6 +116,21 @@
(eshell-execute-file temp-file '(1 2 3) t))
(should (equal (buffer-string) "6")))))
+(ert-deftest em-script-test/execute-file/output-file ()
+ "Test `eshell-execute-file' redirecting to a file."
+ (ert-with-temp-file temp-file :text "echo more"
+ (ert-with-temp-file output-file :text "initial"
+ (with-temp-eshell-settings
+ (eshell-execute-file temp-file nil output-file))
+ (should (equal (eshell-test-file-string output-file) "moreinitial")))))
+
+(ert-deftest em-script-test/execute-file/output-symbol ()
+ "Test `eshell-execute-file' redirecting to a symbol."
+ (ert-with-temp-file temp-file :text "echo hi\necho bye"
+ (with-temp-eshell-settings
+ (eshell-execute-file temp-file nil 'eshell-execute-file-output))
+ (should (equal eshell-execute-file-output "hibye"))))
+
(ert-deftest em-script-test/batch-file ()
"Test running an Eshell script file as a batch script."
(ert-with-temp-file temp-file
diff --git a/test/lisp/eshell/esh-io-tests.el b/test/lisp/eshell/esh-io-tests.el
index b4e8c0b4a9a..6add14c05fa 100644
--- a/test/lisp/eshell/esh-io-tests.el
+++ b/test/lisp/eshell/esh-io-tests.el
@@ -34,12 +34,6 @@
(defvar eshell-test-value-with-fun nil)
(defun eshell-test-value-with-fun ())
-(defun eshell-test-file-string (file)
- "Return the contents of FILE as a string."
- (with-temp-buffer
- (insert-file-contents file)
- (buffer-string)))
-
(defun eshell/test-output ()
"Write some test output separately to stdout and stderr."
(eshell-printn "stdout")
diff --git a/test/lisp/eshell/eshell-tests-helpers.el
b/test/lisp/eshell/eshell-tests-helpers.el
index bfd829c95e9..def04be0577 100644
--- a/test/lisp/eshell/eshell-tests-helpers.el
+++ b/test/lisp/eshell/eshell-tests-helpers.el
@@ -139,6 +139,12 @@ After inserting, call FUNC. If FUNC is nil, instead call
(buffer-substring-no-properties
(eshell-beginning-of-output) (eshell-end-of-output)))
+(defun eshell-test-file-string (file)
+ "Return the contents of FILE as a string."
+ (with-temp-buffer
+ (insert-file-contents file)
+ (buffer-string)))
+
(defun eshell-match-output (regexp)
"Test whether the output of the last command matches REGEXP."
(string-match-p regexp (eshell-last-output)))