From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Albinus Subject: Re: remote execution in heterogeneous environment Date: Thu, 20 Dec 2012 14:16:24 +0100 Message-ID: <87hang279z.fsf@gmx.de> References: <6D36E0F9-01D1-4F95-9FAA-B2B2CA10E57E@gmail.com> <87623zaj4j.fsf@gmx.de> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:39666) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tlj5W-0008MU-9W for emacs-orgmode@gnu.org; Thu, 20 Dec 2012 11:35:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TlfzE-00051C-LO for emacs-orgmode@gnu.org; Thu, 20 Dec 2012 08:17:24 -0500 Received: from mout.gmx.net ([212.227.15.18]:60855) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TlfzE-000515-9I for emacs-orgmode@gnu.org; Thu, 20 Dec 2012 08:16:32 -0500 Received: from mailout-de.gmx.net ([10.1.76.4]) by mrigmx.server.lan (mrigmx001) with ESMTP (Nemesis) id 0MHJbp-1TpIc91cRP-00E7Yc for ; Thu, 20 Dec 2012 14:16:30 +0100 In-Reply-To: <87623zaj4j.fsf@gmx.de> (Michael Albinus's message of "Tue, 18 Dec 2012 08:56:28 +0100") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: George Jones Cc: emacs-orgmode@gnu.org Michael Albinus 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 + + * 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 * 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.