emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] remote execution in heterogeneous environment


From: Michael Albinus
Subject: Re: [O] remote execution in heterogeneous environment
Date: Thu, 20 Dec 2012 14:16:24 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Michael Albinus <address@hidden> writes:

Hi,

> Looks, like nobody did take the ball :-(
>
> Maybe I'll check it again over XMas days, and maybe I can propose a
> concrete patch then.

The following patch I've committed to Emacs' trunk, it fixes the problem
as far as I could test. Maybe somebody from the org maintainers could
merge it into the org repository.

--8<---------------cut here---------------start------------->8---
~/src/emacs/lisp/org> bzr diff >123
=== modified file 'lisp/org/ChangeLog'
--- lisp/org/ChangeLog  2012-12-13 05:29:15 +0000
+++ lisp/org/ChangeLog  2012-12-20 13:09:40 +0000
@@ -1,3 +1,12 @@
+2012-12-20  Michael Albinus  <address@hidden>
+
+       * ob.el (org-babel-temp-file): Fix setting of
+       `temporary-file-directory' on remote hosts.
+
+       * ob-eval.el (org-babel-shell-command-on-region): Use
+       `process-file' instead of `call-process-region'.  The latter one
+       does not work on remote hosts.
+
 2012-12-13  Bastien Guerry  <address@hidden>

        * org-latex.el (org-export-latex-links): Escape raw path when

=== modified file 'lisp/org/ob-eval.el'
--- lisp/org/ob-eval.el 2012-09-30 15:14:59 +0000
+++ lisp/org/ob-eval.el 2012-12-20 13:06:27 +0000
@@ -134,14 +134,13 @@
                       current-prefix-arg
                       shell-command-default-error-buffer
                       t)))
-  (let ((error-file
-        (if error-buffer
-            (make-temp-file
-             (expand-file-name "scor"
-                                (if (featurep 'xemacs)
-                                    (temp-directory)
-                                  temporary-file-directory)))
-          nil))
+  (let ((input-file (org-babel-temp-file "input-"))
+       (error-file (if error-buffer (org-babel-temp-file "scor-") nil))
+       (shell-file-name
+        (if (file-executable-p
+             (concat (file-remote-p default-directory) shell-file-name))
+            shell-file-name
+          "/bin/sh"))
        exit-status)
     (if (or replace
            (and output-buffer
@@ -151,12 +150,14 @@
          ;; Don't muck with mark unless REPLACE says we should.
          (goto-char start)
          (and replace (push-mark (point) 'nomsg))
+         (write-region start end input-file)
+         (delete-region start end)
          (setq exit-status
-               (call-process-region start end shell-file-name t
-                                    (if error-file
-                                        (list output-buffer error-file)
-                                      t)
-                                    nil shell-command-switch command))
+               (process-file shell-file-name input-file
+                             (if error-file
+                                 (list output-buffer error-file)
+                               t)
+                             nil shell-command-switch command))
          ;; It is rude to delete a buffer which the command is not using.
          ;; (let ((shell-buffer (get-buffer "*Shell Command Output*")))
          ;;   (and shell-buffer (not (eq shell-buffer (current-buffer)))
@@ -175,14 +176,14 @@
                (progn (setq buffer-read-only nil)
                       (delete-region (max start end) (point-max))
                       (delete-region (point-min) (min start end))
+                      (write-region (point-min) (point-max) input-file)
+                      (delete-region (point-min) (point-max))
                       (setq exit-status
-                            (call-process-region (point-min) (point-max)
-                                                 shell-file-name t
-                                                 (if error-file
-                                                     (list t error-file)
-                                                   t)
-                                                 nil shell-command-switch
-                                                 command)))
+                            (process-file shell-file-name input-file
+                                          (if error-file
+                                              (list t error-file)
+                                            t)
+                                          nil shell-command-switch command)))
              ;; Clear the output buffer, then run the command with
              ;; output there.
              (let ((directory default-directory))
@@ -192,11 +193,11 @@
                      (setq default-directory directory))
                  (erase-buffer)))
              (setq exit-status
-                   (call-process-region start end shell-file-name nil
-                                        (if error-file
-                                            (list buffer error-file)
-                                          buffer)
-                                        nil shell-command-switch command)))
+                   (process-file shell-file-name nil
+                                 (if error-file
+                                     (list buffer error-file)
+                                   buffer)
+                                 nil shell-command-switch command)))
          ;; Report the output.
          (with-current-buffer buffer
            (setq mode-line-process
@@ -230,6 +231,9 @@
            ;; (kill-buffer buffer)
            ))))

+    (when (and input-file (file-exists-p input-file))
+      (delete-file input-file))
+
     (when (and error-file (file-exists-p error-file))
       (if (< 0 (nth 7 (file-attributes error-file)))
          (with-current-buffer (get-buffer-create error-buffer)

=== modified file 'lisp/org/ob.el'
--- lisp/org/ob.el      2012-10-26 14:42:05 +0000
+++ lisp/org/ob.el      2012-12-20 13:05:00 +0000
@@ -2547,18 +2547,14 @@
 Passes PREFIX and SUFFIX directly to `make-temp-file' with the
 value of `temporary-file-directory' temporarily set to the value
 of `org-babel-temporary-directory'."
-  (if (file-remote-p default-directory)
-      (make-temp-file
-       (concat (file-remote-p default-directory)
-              (expand-file-name
-               prefix temporary-file-directory)
-              nil suffix))
-    (let ((temporary-file-directory
+  (let ((temporary-file-directory
+        (if (file-remote-p default-directory)
+            (concat (file-remote-p default-directory) "/tmp")
           (or (and (boundp 'org-babel-temporary-directory)
                    (file-exists-p org-babel-temporary-directory)
                    org-babel-temporary-directory)
-              temporary-file-directory)))
-      (make-temp-file prefix nil suffix))))
+              temporary-file-directory))))
+      (make-temp-file prefix nil suffix)))

 (defun org-babel-remove-temporary-directory ()
   "Remove `org-babel-temporary-directory' on Emacs shutdown."
--8<---------------cut here---------------end--------------->8---

Best regards, Michael.



reply via email to

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