<div dir="ltr"><div>Here is a patch for a proof of concept (file /collects/pkg/lib.rkt).<br><br></div><div>The modifications are minimal as I had expected, but obviously I only have a very narrow view of the package system, so probably something does not work properly.<br>


</div><div>In particular, I changed only for the &#39;dir type, and did not touch the &#39;link type.<br>Since the &#39;github type and others use the &#39;dir type once the archive is downloaded, I think it should work as expected for those too.<br>


</div><div><br></div><div>I&#39;ve tested on an &quot;old&quot; 5.3.4.10--2013-05-13(96acfb0/a) [3m], but made the patch with the latest in git, and it still works with the old version.<br></div><div>(I was about to test it with the latest nightly, but its installation failed, see the mailing list)<br>

</div><div><br></div><div>To try it, in the collects/pkg directory:<br></div><div>$ patch lib.rkt lib.rkt.patch<br></div><div>$ sudo raco setup -D pkg<br></div><div><br></div>Then create a dummy package:<br><div>$ cd /tmp<br>

</div><div>$ mkdir dummy<br></div>$ echo &#39;#lang racket\n(displayln &quot;It works!&quot;)&#39; &gt; dummy/main.rkt<br><div>
<div>$ touch dummy/single-collect<br><br></div></div><div>The file &quot;single-collect&quot; is here to signal that this package is a single-collection package (it&#39;s not the right way to do it, but it&#39;s a proof of concept).<br>

<br>Install the package:<br>$ raco pkg install -t dir dummy<br>
<br></div><div>(You should see  &quot;This is a single-collection package&quot; as the first line of the log)<br></div><div><br></div><div>Then try it:<br></div><div>$ racket<br></div><div>&gt; (require dummy)<br></div><div>


It works!<br></div><div><br></div><div>Or is this patch way too naive for some reason?<br></div><div><br></div><div>Laurent<br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jun 3, 2013 at 4:37 PM, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org" target="_blank">eli@barzilay.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">(I completely agree with you, so I&#39;ll take it off-line.)<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
30 minutes ago, Laurent wrote:<br>
&gt; On Mon, Jun 3, 2013 at 2:44 PM, Eli Barzilay &lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>&gt; wrote:<br>
&gt;<br>
&gt;     Yesterday, Laurent wrote:<br>
&gt;     &gt; On Sun, Jun 2, 2013 at 1:47 PM, Eli Barzilay &lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>&gt; wrote:<br>
&gt;     &gt;<br>
&gt;     &gt;     To clarify, because of reasons that I won&#39;t go into on the list,<br>
&gt;     &gt;     the actual chances of me getting this implemented (and of such a<br>
&gt;     &gt;     change being accepted) are pretty much in the area of &quot;slim to<br>
&gt;     &gt;     none&quot;.  <br>
&gt;     &gt;<br>
&gt;     &gt; That&#39;s a bummer. At first sight I&#39;d have thought that it would have<br>
&gt;     &gt; just been a matter of creating a directory with the same name as the<br>
&gt;     &gt; package, and then decompressing the package into that directory.<br>
&gt;<br>
&gt;     At the lower level, packages use links, and &quot;raco link&quot;&#39;s default mode<br>
&gt;     of work is at the collection level.  There is obviously a need for<br>
&gt;     packages that correspond to collection roots, but I wanted to see the<br>
&gt;     default being the same as the raco-link default (which fits most uses<br>
&gt;     that don&#39;t come out of the current main tree).<br>
&gt;<br>
&gt; Not sure I was clear, or I don&#39;t exactly understand what you mean.<br>
&gt; And maybe I&#39;m missing some important point here.<br>
&gt;<br>
&gt; But the more I think about it, the less I see why this<br>
&gt; double-directory thing should be the default behavior of the new package<br>
&gt; system (I can understand why it&#39;s useful for plt packages though).<br>
&gt; Even Carl&#39;s &quot;mischief&quot; package doesn&#39;t make use of collections like<br>
&gt; that.<br>
&gt; Jen&#39;s &quot;this-and-that&quot; does, though, but then every collection of his<br>
&gt; package must have a name that is different from any existing collection.<br>
&gt; (And actually I think that&#39;s a bad idea, and that he should split his<br>
&gt; package into several single-collection packages −unless they are<br>
&gt; tightly related− because I don&#39;t want to install all his collections if I want<br>
&gt; to only try one of them, unless there is a way to install only one<br>
&gt; collection of an existing package?)<br>
&gt;<br>
&gt; For example, my personal racket project tree is arranged somewhat like<br>
&gt; that:<br>
&gt; racket<br>
&gt; ├── project-B<br>
&gt; │   └── main.rkt<br>
&gt; ├── project-A<br>
&gt; │   └── main.rkt<br>
&gt; ├── not-yet(?)a-project-C<br>
&gt; ├── my-collects<br>
&gt; │   ├── slideshow<br>
&gt; │   ├── scribble<br>
&gt; │   ├── racket<br>
&gt; │   └── data<br>
&gt; └── misc<br>
&gt;     ├── try-this.rkt<br>
&gt;     └── try-that.rkt<br>
&gt;<br>
&gt; project-A and project-B are git clones.<br>
&gt; my-collects contains all my extensions to racket&#39;s collections,<br>
&gt; plus some more generally useful collections.<br>
&gt;<br>
&gt; For my personal use, I just do:<br>
&gt;   raco link project-A project-B my-collects<br>
&gt; and all is fine.<br>
&gt; I tend to believe it&#39;s a quite common tree for racket users.<br>
&gt;<br>
&gt; In &quot;my-collects&quot;, I have names that would collide with racket&#39;s collections,<br>
&gt; so instead of having:<br>
&gt; (require orseau/racket/slideshow)<br>
&gt; as in the former package system, I would now have<br>
&gt; (require some-funny-name/slideshow)<br>
&gt; after renaming my-collects to some-funny-name to make sure it does not<br>
&gt; collide with anything else.<br>
&gt;<br>
&gt; ... and since I don&#39;t want to invent a funny name for each extension of a<br>
&gt; racket collection I do, I prefer to put them all in a single package and<br>
&gt; collection.<br>
&gt;<br>
&gt; Now if I were to follow the new package system, I&#39;d need to change my<br>
&gt; tree to:<br>
&gt; racket<br>
&gt; ├── misc<br>
&gt; │   ├── try-that.rkt<br>
&gt; │   └── try-this.rkt<br>
&gt; ├── some-funny-name<br>
&gt; │   └── some-funny-name<br>
&gt; │       ├── data<br>
&gt; │       ├── racket<br>
&gt; │       ├── scribble<br>
&gt; │       └── slideshow<br>
&gt; ├── not-yet(?)a-project-D<br>
&gt; ├── project-A<br>
&gt; │   └── project-A<br>
&gt; │       └── main.rkt<br>
&gt; └── project-B<br>
&gt;     └── project-B<br>
&gt;         └── main.rkt<br>
&gt;<br>
&gt; which is a mess. And I would also need to change my git repos to<br>
&gt; match that structure, which looks awkward.<br>
&gt; /But/ I don&#39;t care if the tree of the packages I *install* look like that.<br>
&gt;<br>
&gt; So what I would like is to keep my tree like the first one, but the<br>
&gt; package system can still install like the second one.<br>
&gt;<br>
&gt; My proposal was that for single-collection packages, I could keep<br>
&gt; my tree like the first one, my git clones like project-A/main.rkt, and<br>
&gt; tell the package manager (probably in the info.rkt file) that it is a<br>
&gt; single-collection package so that when it installs it in the<br>
&gt; installed-package-directory-that-I-will-not-look-into it generates a tree<br>
&gt; like the second one.<br>
&gt;<br>
&gt;     Well, the reason I think that plain collection packages are important<br>
&gt;     is it will simplify dealing with packages, and lower the investment<br>
&gt;     threshold that you need to publish a package.  Along the same line,<br>
&gt;     there should also be a way to put out just a single file (or very few)<br>
&gt;     as a first step where I make some code public but with absolutely<br>
&gt;     minimum effort on the publisher&#39;s side.  See for example the<br>
&gt;     &quot;Processing&quot; thread, where Sean said that people who do these kind of<br>
&gt;     thing &quot;don&#39;t even know what source control is, let alone packages&quot; --<br>
&gt;     so the existence of such a crowd is a perfect reason for a single-file<br>
&gt;     thing being another important point on the code distribution spectrum.<br>
&gt;<br>
&gt; I entirely agree with that, and I think it is of utmost importance for a<br>
&gt; programming language (and system) to make sure that its users can<br>
&gt; easily share code. Probably all of you agree with that, but I want to<br>
&gt; emphasize that it&#39;s really important to put as much effort as required<br>
&gt; into that.<br>
&gt;<br>
&gt; Don&#39;t get me wrong, I really like the steps forward taken with the new<br>
&gt; direction of the package system, but right now there&#39;s a psychological<br>
&gt; wall that prevents me from publishing more v2 packages.<br>
&gt;<br>
&gt; Laurent<br>
&gt;<br>
<br>
</div></div><div class="HOEnZb"><div class="h5">--<br>
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:<br>
                    <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a>                   Maze is Life!<br>
</div></div></blockquote></div><br></div>