summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2011-05-20 13:30:45 -0700
committerDan Davison <dandavison7@gmail.com>2011-05-20 13:30:45 -0700
commitcec8711a44a9a1ac6552546c05ec0623a2bf9e45 (patch)
tree3b96759f508458810b96178e71848ca7bdf2d425
parent7af369da697930ab89b0c26d52b13b3ebf3ec8c1 (diff)
downloadorg-mode-cec8711a44a9a1ac6552546c05ec0623a2bf9e45.tar.gz
Avoid race condition in ob-R code responsible for writing result to disk
Slight modification of patch by Christophe Rhodes * lisp/ob-R.el (org-babel-R-write-object-command): Ensure that all data is written to the results file before Emacs notices that the file exists.
-rw-r--r--lisp/ob-R.el2
1 files changed, 1 insertions, 1 deletions
diff --git a/lisp/ob-R.el b/lisp/ob-R.el
index 713d59f..d0efcbb 100644
--- a/lisp/ob-R.el
+++ b/lisp/ob-R.el
@@ -227,7 +227,7 @@ current code buffer."
(defvar org-babel-R-eoe-indicator "'org_babel_R_eoe'")
(defvar org-babel-R-eoe-output "[1] \"org_babel_R_eoe\"")
-(defvar org-babel-R-write-object-command "{function(object, transfer.file) {object;invisible(if(inherits(try(write.table(object, file=transfer.file, sep=\"\\t\", na=\"nil\",row.names=%s, col.names=%s, quote=FALSE), silent=TRUE),\"try-error\")) {if(!file.exists(transfer.file)) file.create(transfer.file)})}}(object=%s, transfer.file=\"%s\")")
+(defvar org-babel-R-write-object-command "{function(object,transfer.file){object;invisible(if(inherits(try({tfile<-tempfile();write.table(object,file=tfile,sep=\"\\t\",na=\"nil\",row.names=%s,col.names=%s,quote=FALSE);file.rename(tfile,transfer.file)},silent=TRUE),\"try-error\")){if(!file.exists(transfer.file))file.create(transfer.file)})}}(object=%s,transfer.file=\"%s\")")
(defun org-babel-R-evaluate
(session body result-type column-names-p row-names-p)