[Rd] possible internal (un)tar bug
Martin Maechler
m@echler @ending from @t@t@m@th@ethz@ch
Tue May 1 16:39:57 CEST 2018
>>>>> Martin Maechler <maechler at stat.math.ethz.ch>
>>>>> on Tue, 1 May 2018 16:14:43 +0200 writes:
>>>>> Gábor Csárdi <csardi.gabor at gmail.com>
>>>>> on Tue, 1 May 2018 12:05:32 +0000 writes:
>> This is a not too old R-devel on Linux, it already fails
>> in R 3.4.4, and on macOS as well.
> and fails in considerably older R versions, too.
> Basically untar() seems to fail on a connection, but works
> fine on a plain file name.
Well, there's an easy workaround: If you want to use a
connection (instead of a simple filename) with untar() and want
to use compression (as in the example), you
can currently do that easily when you ensure the connection is
a "gzcon" one :
##=========> Workaround for now:
## Create :
setwd(tempdir()) ; dir.create("pkg")
cat("this: that\n", file = file.path("pkg", "DESCRIPTION"))
tf <- "pkg_1.0.tar.gz"
tar(tf, "pkg", compression = "gzip", tar = "internal")
unlink("pkg", recursive = TRUE)
## As it is a compressed tar file, use it via a gzcon() connection,
## and both cases work fine:
con <- gzcon(file(tf, open = "rb")) ; (f <- untar(con, list = TRUE))
## ~~~~~
con <- gzcon(file(tf, open = "rb")) ; untar(con, files = f)
stopifnot(identical(f, "pkg/DESCRIPTION"),
file.exists(f))
unlink(c(tf,"pkg"), recursive = TRUE) # clean after me
------------
Of course, ideally untar() should do that for us and I'm testing
a simple patch to do that.
Martin
More information about the R-devel
mailing list