[racket-dev] Updating dependency packages from other sources

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Fri Aug 16 16:27:41 EDT 2013

At Thu, 15 Aug 2013 11:07:07 -0400, Asumu Takikawa wrote:
> On 2013-08-15 08:19:06 -0600, Jay McCarthy wrote:
> > As for what we could do going forward, I think either of these
> > approaches could be 'automated'.
> Yes, that'd be great.
> > For instance, we could add a command like
> >
> > $ raco pkg replace x11 new-x11-source
> >
> > This would behave like either of those (which would be invisible to the user).
> >
> > Do you have any opinions about how you'd want to do this replacement?
> Maybe `raco pkg install` can have an additional flag that lets you
> replace existing packages? Or maybe it should allow conflicts if the
> package has the same name as an already installed package (possibly
> prompting/warning the user)?

How about allowing a package source as an argument to `raco pkg update`?

After all, removing an old package implementation and installing a new
one is already the job of `raco pkg update`, not `raco pkg install`.

Then again, dealing with package sources and recording a new
name->source mapping is already the job of `raco pkg install`, not
`raco pkg update`.

I lean toward changing `raco pkg update`, because I think it's
reasonable to treat a package source other than a package name as a
"replace" request by default. In contrast, I don't think `raco pkg
install` should ever overwrite an existing package implementation by

For example, I can imagine

 raco pkg install stuff.zip
 ... get a new "stuff.zip" ...
 raco pkg update stuff.zip

and that seems better to me than

 raco pkg install stuff.zip
 ... get a new "stuff.zip" ...
 raco pkg install --replace stuff.zip

I have in mind that `raco pkg update` would treat as package name as it
does now, instead of like other package sources. That is, it would
update based on how the package was previously installed. There's a
difference only if the package was installed from a package source
other than a package name, though.

Naturally, the special treatment of package names would necessitate a
new flag for consistent treatment of package sources. Specifically, if
you wanted to replace an existing package installation with a catalog
reference, then you'd have to use a flag to `raco pkg update'.

Posted on the dev mailing list.