[R] install.packages() - old version deleted, new version did not install

Jon Olav Skoien jon.skoien at jrc.ec.europa.eu
Mon Dec 20 17:23:06 CET 2010


This sounds like a good solution for the case I described in my first 
email.

Thanks a lot!
Jon

On 12/20/2010 4:05 PM, Duncan Murdoch wrote:
> On 20/12/2010 9:29 AM, Duncan Murdoch wrote:
>> On 20/12/2010 9:26 AM, Uwe Ligges wrote:
>> >
>> >  On 20.12.2010 15:19, Duncan Murdoch wrote:
>> > >   On 20/12/2010 9:03 AM, Jon Olav Skoien wrote:
>
> [ lots deleted ]
>
>> > >>   Yes, I had it open. In this case it was intentional to give a
>> > >>   reproducible example in case something had changed in the new 
>> version,
>> > >>   in other cases I have had to wait for 2 days before I could 
>> reinstall a
>> > >>   package. It seems the .dll is the one causing the problem, so 
>> wouldnt it
>> > >>   be possible to test if this file can be unlinked before trying 
>> to unlink
>> > >>   the complete directory in utils:::unpackPkgZip? Then the 
>> package should
>> > >>   be left untouched if it is in use, and not partly deleted as 
>> today.
>> > >
>> > >   I don't know. Perhaps we could try to rename the folder; if 
>> that fails,
>> > >   abort the whole thing. If that succeeds but something later 
>> fails, then
>> > >   remove all the new stuff and restore the old folder. Do you 
>> know of a
>> > >   better test?
>> >
>> >  I think we had something like that in the past which did not work
>> >  properly on network shares and we had to change the way it works for
>> >  that reason.
>>
>> I just took a look at the code, and I see that something like that is
>> still there.  I haven't tried it yet, so I don't know if it is in use.
>
> After a closer look I see that the code is there for source installs, 
> but not binary installs.  For binary installs the procedure is:
>
>  unzip the package to a temporary directory
>  look at the DESCRIPTION to find the package name (since you can't 
> trust the .zip name)
>  abort if the package is in the search list.  (This is the test that 
> could be stronger, because it doesn't detect a package in use in 
> another instance of R.)
>  remove the old package if it is there.  (This is the step that 
> removes everything but the old DLL when the DLL is in use.)
>  copy the new package into place. (This fails because of the collision 
> with the old DLL.)
>
> I'll look into strengthening the test at the 3rd step with something 
> along the lines described above.  From Uwe's description, this might 
> still not
> be perfect, but it should help with local installs.
>
> Duncan Murdoch
>
>



More information about the R-help mailing list