From maechler at stat.math.ethz.ch  Sun Sep 28 00:19:34 2008
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Sun, 28 Sep 2008 00:19:34 +0200
Subject: [Rd] Outdated dependencies and install.packages()
In-Reply-To: <48AD2D26.7040306@biostat.ku.dk>
References: <48ABF23B.70707@biostat.ku.dk>
	<alpine.LFD.1.10.0808201232150.5896@gannet.stats.ox.ac.uk>
	<48AC32FC.8040606@biostat.ku.dk>
	<18605.7073.337671.44537@stat.math.ethz.ch>
	<48AD2D26.7040306@biostat.ku.dk>
Message-ID: <18654.45430.632840.424450@cmath-5.math.ethz.ch>

>>>>> "PD" == Peter Dalgaard <P.Dalgaard at biostat.ku.dk>
>>>>>     on Thu, 21 Aug 2008 10:53:58 +0200 writes:

    PD> Martin Maechler wrote:
    >>>>>>> "PD" == Peter Dalgaard <P.Dalgaard at biostat.ku.dk>
    >>>>>>> on Wed, 20 Aug 2008 17:06:36 +0200 writes:
    >>>>>>> 
    >> 
    PD> Prof Brian Ripley wrote:
    >> >> On Wed, 20 Aug 2008, Peter Dalgaard wrote:
    >> >> 
    >> >>> This looks like a buglet:
    >> >>> 
    >> >>>> install.packages("lme4", depend=TRUE, lib="~/Rlibrary/")
    >> >>> --- Please select a CRAN mirror for use in this session ---
    >> >>> [...snip...]
    >> >>> ** preparing package for lazy loading
    >> >>> Error: package 'Matrix' 0.999375-4 was found, but >= 0.999375.11 is
    >> >>> required by 'lme4'
    >> >>> Execution halted
    >> >>> ERROR: lazy loading failed for package 'lme4'
    >> >>> ** Removing '/home/bs/pd/Rlibrary/lme4'
    >> >>> ** Restoring previous '/home/bs/pd/Rlibrary/lme4'
    >> >>> 
    >> >>> and the DESCRIPTION file for lme 4 does have
    >> >>> 
    >> >>> Depends: methods, R(? 2.7.0), Matrix(? 0.999375-11), lattice
    >> >>> <http://cran.r-project.org/web/packages/lattice/index.html>
    >> >>> 
    >> >>> 
    >> >>> Looks like we're either not checking the version requirement of
    >> >>> dependencies, or something is making 4 > 11... (from my reading of the
    >> >>> code, it is the former, but I could have missed something).
    >> >> 
    >> >> We don't check version requirements of dependencies in
    >> >> install.packages(). That's a minefield related to having multiple
    >> >> versions of a package on a system and which gets loaded/namespace
    >> >> loaded, so you can easily have the needed version but pick up a
    >> >> different one.
    >> >> 
    >> >> Depending on whether lazy-loading is in place (and various other
    >> >> issues) you may or may not need the dependencies to install the
    >> >> package.  It's also a problem that you can update dependencies to
    >> >> incompatible ones, so the versions available at installation are only
    >> >> part of the story.
    >> >> 
    >> >> I don't see why the message reports .11 not -11, but that may be
    >> >> related to "package_version" classes.
    >> >> 
    >> >>> We should at least document the behaviour.
    >> >> 
    >> >> I am not sure where you think it should be documented and is not.
    >> >> But for install.packages():
    >> >> 
    >> >> dependencies: logical indicating to also install uninstalled packages
    >> >> on which these packages depend/suggest/import (and so on
    >> >> recursively).  Not used if 'repos = NULL'. Can also be a
    >> >> character vector, a subset of 'c("Depends", "Imports",
    >> >> "Suggests")'.
    >> >> 
    >> >> 'uninstalled' seems pretty clear to me.
    >> >> 
    PD> It isn't. Matrix 0.999375-11 was 'uninstalled'. The above could just
    PD> mean that if you installed it, it wouldn't be installed again.
    >> 
    PD> Something like "Notice that version dependencies are not checked." would
    PD> help. (Assuming that people read the help page.)
    >> 
    >> Or even more:
    >> 
    >> "
    >> Notice that version dependencies are not checked such that
    >> outdated versions of installed packages are \emph{not} updated.
    >> Consider using  \code{\link{update.packages}()} before 
    >> \code{install.packages()}.
    >> "
    >> 
    >> Note that --- thanks to Heather Turner nice help.request() proposal ---
    >> one of my top "TODOs" for R-devel is
    >> to finish a generalization of the current
    >> update.packages()
    >> function (that I have not quite finished)
    >> which will allow to only look for updates of specified set of
    >> packages rather than all packages in a given lib.loc
    >> {something that should *not* be triggered by a help.request()
    >> for a user (as ours) who has ~ 2000 R packages installed}.

I have now finally committed this code to R-devel (rev 46576)
and plan to port it to R-2.8.0 alpha before feature freeze.

It may well be worth if a few people have a look, and maybe even
try to send their next R-help e-mail with the new
help.request() function ..

Martin

    PD> That's essentially what happened to me (not with 2000 packages, though).
    PD> I was looking into the lme4/aod issue - reinstall lme4 - Matrix out of
    PD> date - update.packages() - wait for an hour or so for gtk2 and friends
    PD> to be updated on my laptop...

    PD> -- 
    PD> O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
    PD> c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
    PD> (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
    PD> ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



[Rd] Outdated dependencies and install.packages()
Martin Maechler