On Mon, Oct 1, 2012 at 9:43 AM, Richard Heck <rgh...@lyx.org> wrote:
> On 10/01/2012 04:04 AM, Jean-Marc Lasgouttes wrote:
>>
>> Le 01/10/2012 08:56, Scott Kostyshak a écrit :
>>>
>>> On Mon, Oct 1, 2012 at 2:46 AM, Yihui Xie <x...@yihui.name> wrote:
>>>>
>>>> I have tested it on my Windows 7 and I did not see any problems.
>>>
>>>
>>> Great, thanks for doing that Yihui. In that case, the question becomes
>>> -- should this be committed only to trunk? I would be in favor of
>>> committing it to branch, but I'm not sure if it's best to do that
>>> before or after 2.0.5 is released.
>>>
>>> Anyone else have an opinion?
>>
>>
>> I think it should go to trunk and branch: is is simpler now (always good)
>> and I trust that Yihui tested it thoroughly.
>>
> Good for branch, then.
>
> Scott, you know about status.20x, yes?

I do, but I would have forgotten to update it. Thank you for the reminder.

Attached are the patches for trunk and branch. Are they OK?

Thanks,

Scott
From dbf68ef44a0d31ee56bb77671ff6929f913d1170 Mon Sep 17 00:00:00 2001
From: Scott Kostyshak <skost...@lyx.org>
Date: Tue, 2 Oct 2012 05:56:01 -0400
Subject: [PATCH] More elegant knitr support and bug fix

Implement a more simple and elegant integration of the R package knitr. Now,
lyxknitr.R does not need to move or copy files at all.

This also fixes a bug: when /tmp was on a different file system (e.g.
encrypted home), lyxknitr.R failed to move files to /tmp because it relied on
R's 'file.rename' function, which in turn relied on the rename function in
<stdio.h>, which was failing with the EXDEV errno.

Patch from Yihui Xie.
---
 lib/examples/knitr.lyx   |    2 +-
 lib/layouts/knitr.module |    2 +-
 lib/scripts/lyxknitr.R   |   17 +++--------------
 status.20x               |    3 +++
 4 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/lib/examples/knitr.lyx b/lib/examples/knitr.lyx
index f096d68..15fd817 100644
--- a/lib/examples/knitr.lyx
+++ b/lib/examples/knitr.lyx
@@ -176,7 +176,7 @@ status collapsed
 
 \begin_layout Plain Layout
 
-http://yihui.github.com/knitr
+http://yihui.name/knitr
 \end_layout
 
 \end_inset
diff --git a/lib/layouts/knitr.module b/lib/layouts/knitr.module
index 694ae77..fe64359 100644
--- a/lib/layouts/knitr.module
+++ b/lib/layouts/knitr.module
@@ -1,7 +1,7 @@
 #\DeclareLyXModule[knitr->latex]{Rnw (knitr)}
 #DescriptionBegin
 #Uses the knitr package in R for dynamic report generation. This R package has 
to be installed for this module to work: install.packages('knitr'). Note it 
depends on R >= 2.14.1.
-#For more info see http://yihui.github.com/knitr
+#For more info see http://yihui.name/knitr
 #DescriptionEnd
 #Category: literate
 #Excludes: lilypond | sweave
diff --git a/lib/scripts/lyxknitr.R b/lib/scripts/lyxknitr.R
index 03150f2..7c029ea 100644
--- a/lib/scripts/lyxknitr.R
+++ b/lib/scripts/lyxknitr.R
@@ -11,7 +11,7 @@
 ## author Yihui Xie
 
 ## knitr is an alternative package to Sweave, and has more features
-## and flexibility; see https://yihui.github.com/knitr
+## and flexibility; see https://yihui.name/knitr
 
 ## Rscript $$s/scripts/lyxknitr.R $$p$$i $$p$$o $$e $$r
 ## $$p the path of the output (temp dir)
@@ -31,18 +31,7 @@ options(encoding = .cmdargs[3])
 ## can put your data files there and functions like read.table() can
 ## work correctly without specifying the full path
 setwd(.cmdargs[4])
+opts_knit$set(root.dir = getwd())
 
-## copy the Rnw file to the current working directory if it does not exist
-.tmp.file = tempfile(); .rnw.file = basename(.cmdargs[1])
-.rnw.exists = file.exists(.rnw.file)
-if (.rnw.exists) file.rename(.rnw.file, .tmp.file)
-file.copy(.cmdargs[1], '.')
 ## run knit() to get .tex or .R
-knit(.rnw.file, tangle = 'tangle' %in% .cmdargs)
-
-setwd(.cmdargs[4])
-## remove the copied .Rnw if it did not exist, otherwise move the original one 
back
-if (.rnw.exists) file.rename(.tmp.file, .rnw.file) else unlink(.rnw.file)
-file.rename(basename(.cmdargs[2]), .cmdargs[2])  # move .tex to the temp dir
-rm(.tmp.file, .rnw.file, .rnw.exists)  # clean up these variables
-
+knit(.cmdargs[1], output = .cmdargs[2], tangle = 'tangle' %in% .cmdargs)
diff --git a/status.20x b/status.20x
index c1f2099..705a639 100644
--- a/status.20x
+++ b/status.20x
@@ -129,6 +129,9 @@ What's new
 
 - Fix tex2lyx import of mhchem commands outside math mode (bug 8306).
 
+- Fix failure of lyxknitr.R to move files when /tmp was on a different
+  file system (e.g. an encrypted home partition).
+
 
 * USER INTERFACE
 
-- 
1.7.9.5

From 06a139ac33333b42657e49668d4044dd11ad056e Mon Sep 17 00:00:00 2001
From: Scott Kostyshak <skost...@lyx.org>
Date: Tue, 2 Oct 2012 05:56:01 -0400
Subject: [PATCH] More elegant knitr support and bug fix

Implement a more simple and elegant integration of the R package knitr. Now,
lyxknitr.R does not need to move or copy files at all.

This also fixes a bug: when /tmp was on a different file system (e.g.
encrypted home), lyxknitr.R failed to move files to /tmp because it relied on
R's 'file.rename' function, which in turn relied on the rename function in
<stdio.h>, which was failing with the EXDEV errno.

Patch from Yihui Xie.
---
 lib/examples/knitr.lyx   |    2 +-
 lib/layouts/knitr.module |    2 +-
 lib/scripts/lyxknitr.R   |   17 +++--------------
 3 files changed, 5 insertions(+), 16 deletions(-)

diff --git a/lib/examples/knitr.lyx b/lib/examples/knitr.lyx
index ddbfe01..feab161 100644
--- a/lib/examples/knitr.lyx
+++ b/lib/examples/knitr.lyx
@@ -182,7 +182,7 @@ status collapsed
 
 \begin_layout Plain Layout
 
-http://yihui.github.com/knitr
+http://yihui.name/knitr
 \end_layout
 
 \end_inset
diff --git a/lib/layouts/knitr.module b/lib/layouts/knitr.module
index 694ae77..fe64359 100644
--- a/lib/layouts/knitr.module
+++ b/lib/layouts/knitr.module
@@ -1,7 +1,7 @@
 #\DeclareLyXModule[knitr->latex]{Rnw (knitr)}
 #DescriptionBegin
 #Uses the knitr package in R for dynamic report generation. This R package has 
to be installed for this module to work: install.packages('knitr'). Note it 
depends on R >= 2.14.1.
-#For more info see http://yihui.github.com/knitr
+#For more info see http://yihui.name/knitr
 #DescriptionEnd
 #Category: literate
 #Excludes: lilypond | sweave
diff --git a/lib/scripts/lyxknitr.R b/lib/scripts/lyxknitr.R
index 03150f2..7c029ea 100644
--- a/lib/scripts/lyxknitr.R
+++ b/lib/scripts/lyxknitr.R
@@ -11,7 +11,7 @@
 ## author Yihui Xie
 
 ## knitr is an alternative package to Sweave, and has more features
-## and flexibility; see https://yihui.github.com/knitr
+## and flexibility; see https://yihui.name/knitr
 
 ## Rscript $$s/scripts/lyxknitr.R $$p$$i $$p$$o $$e $$r
 ## $$p the path of the output (temp dir)
@@ -31,18 +31,7 @@ options(encoding = .cmdargs[3])
 ## can put your data files there and functions like read.table() can
 ## work correctly without specifying the full path
 setwd(.cmdargs[4])
+opts_knit$set(root.dir = getwd())
 
-## copy the Rnw file to the current working directory if it does not exist
-.tmp.file = tempfile(); .rnw.file = basename(.cmdargs[1])
-.rnw.exists = file.exists(.rnw.file)
-if (.rnw.exists) file.rename(.rnw.file, .tmp.file)
-file.copy(.cmdargs[1], '.')
 ## run knit() to get .tex or .R
-knit(.rnw.file, tangle = 'tangle' %in% .cmdargs)
-
-setwd(.cmdargs[4])
-## remove the copied .Rnw if it did not exist, otherwise move the original one 
back
-if (.rnw.exists) file.rename(.tmp.file, .rnw.file) else unlink(.rnw.file)
-file.rename(basename(.cmdargs[2]), .cmdargs[2])  # move .tex to the temp dir
-rm(.tmp.file, .rnw.file, .rnw.exists)  # clean up these variables
-
+knit(.cmdargs[1], output = .cmdargs[2], tangle = 'tangle' %in% .cmdargs)
-- 
1.7.9.5

Reply via email to