[racket-dev] Package management
The package system has a notion of "auto" packages, which are packages
that were automatically installed to satisfy dependencies. Also, `raco
pkg remove' supports an `--auto' flag for automatically removing auto
packages that have no non-auto packages depending on them.
So, instead of adding package roots, one possibility is:
* Make `raco pkg show' show only non-auto packages by default.
* Change the `pkg-links' Makefile target to install only links for
packages needed by a particular package (which defaults to some sort
of "main-distribution" package), and to install links forced by
dependencies as "auto".
The second bullet is along a direction that things are moving, anyway.
I think there will need to be some other refinements to auto mode. For
example, if you have a package in auto mode and you try to install it,
I think you get an already-installed error and the package stays in
auto mode. But those are small changes, I think.
Does this sound enough like what you had in mind?
At Thu, 27 Jun 2013 12:53:59 -0400, Carl Eastlund wrote:
> I just ran "raco pkg show" on a fresh install, and its output is huge now.
> Of course, this is inevitable when we break the distribution up into many
> packages, but it makes the tool unmanageable for routine use. I'd like to
> propose a way around this, that would also solve some of my normal
> usability gripes with package managers.
>
> I propose we have "package roots" -- roots to the forest of package
> dependencies. These are the packages the user actually wants; every other
> installed package is pulled in as the dependencies to support these. Then
> "raco pkg show" can show just these packages, so in a fresh install we'd
> just see "racket" or "racket+gui" or whatever. We could add a flag to show
> everything, when necessary.
>
> This also gives us some room to automate removal of packages the user
> doesn't need. For instance, if I install package A which depends on B, C,
> and D, of course raco pkg install will install B, C, and D. If I remove
> package A, currently B, C, and D are going to stay unless I explicitly
> remove them, if I recall correctly. If we base our system on a set of root
> packages, then B, C, and D would be removable as soon as A is removed, if A
> was a root and the others were not. We could have "raco pkg remove A"
> remove them immediately, or we could have some explicit "raco pkg cleanup"
> to remove them. Whichever way we go, we could add a flag to "raco pkg
> remove" to swap behavior. This would make cleaning up a lot easier when a
> package has many dependencies. It would also mean upgrading a package
> whose dependencies have changed would allow the system to automatically
> clean up dependencies that aren't needed any more.
>
> I don't know how hard it would be to implement this, but I think it would
> make the package system much more usable to present 90% of the interactions
> solely in terms of the top-level packages the user cares about, and do all
> the cleanup of dependency packages silently in the background when possible.
>
> Carl Eastlund
> _________________________
> Racket Developers list:
> http://lists.racket-lang.org/dev