I'm pretty darned happy with Portage, but before I knew about it and was using RPMs, one topic I kept coming back to was the idea of sparse distributions. Gentoo doesn't have direct support for sparse distributions, and I'd like to request some "helper functions" in ebuild to support CVS-based distributions. Consider a hypothetical system. I use CVS here because CVS is extremely common as a source repository, and CVS clients for practically every OS. FRESH INSTALL: 1) 'cvs checkout' project in normal build directory. 2) Make a tarball from checkout directory, and move it to the tarball dir. We do this to save space on the client. 3) Go about normal build/install process UPGRADE: 1) Unpack previous tarball to build directory. 2) 'cvs up -z3 -rxxx' the directory 3) Rebuild tarball, and replace old tarball 4) Go about normal build/install process Rather than downloading a binary in which only a couple of files may have changed, we sparsely download only the diffs. This could drastically reduce the amount of network traffic for Gentoo systems. Consider Mozilla or KDE -- enormous distributions which would greatly benefit from CVS distribution, even on machines that live on a fast network. My wishlist then would be the simple addition of one ebuild variable, and some additional behavior in Portage if it recognizes the variable: CVSSRC=':pserver:...' If Portage sees CVSSRC, it knows that it is dealing with a CVS distribution, and will behave accordingly. SRC can still be available for downloading patches and supporting tarballs. Then, the src_unpack() would handle the CVS checkout and tarball creation. The rest of the build process would proceed normally. This is analogous to Portage's use of rsync for maintaining the ebuild directory on the client machine. rsync would work just as well as CVS, but CVS is much more common as a distribution mechanism. In fact, once the CVS support were added, extending the system to support adding rsync would be probably two or three lines of code, and would add a new variable: RSYNCSRC="uri" Thanks for taking the time to read this, and I'm sorry for not implementing it myself and sending you patches.
/usr/portage/eclass/cvs.eclass