<div dir="ltr">That all sounds like exactly what I had in mind, with different (pretty much better) terminology.<br><div><div class="gmail_extra"><br clear="all"><div>Carl Eastlund</div>
<br><div class="gmail_quote">On Thu, Jun 27, 2013 at 3:17 PM, Matthew Flatt <span dir="ltr">&lt;<a href="mailto:mflatt@cs.utah.edu" target="_blank">mflatt@cs.utah.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

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