On Sat, May 7, 2011 at 9:41 PM, Robert Bradshaw
<rober...@math.washington.edu> wrote:
> On Fri, May 6, 2011 at 2:21 PM, Ondrej Certik <ond...@certik.cz> wrote:
>> On Fri, May 6, 2011 at 2:19 PM, Ondrej Certik <ond...@certik.cz> wrote:
>>> On Fri, May 6, 2011 at 11:26 AM, Robert Bradshaw
>>> <rober...@math.washington.edu> wrote:
>>> [...]
>>>> Were I to design the system from scratch, I'd put
>>>> all our code (devel/scripts/...) in a single repo, along with the
>>>> top-level files, and a list of dependencies (spkgs). Building sage
>>>> would fetch (locally or remotely) the dependencies listed and build
>>>> them in such a way that changing the list of dependencies and
>>>> re-building would easily and cheaply reversible. I would probably
>>>> still build my own Python, but may require it (flexible version) as a
>>>> bootstrapping prerequisite. Whether the non-upstream parts of an spkg
>>>> belong in the spkgs or the main repo, I'm not sure, but I'd rather
>>>> *everything* be expressed as commit to a single repository (possibly
>>>> moving a pointer to some new, vanilla upstream source, rather than
>>>> putting all upstream sources in our repo).
>>>>
>>>> If others have similar views, maybe we could move in that direction.
>>>
>>> I actually developed such a system from scratch (it's called Qsnake:
>>> http://qsnake.com) and pretty much followed your paragraph above, so I
>>> pushed all the repos at github:
>>>
>>> https://github.com/qsnake
>
> Cool.
>
>>> for example the Cython repo is here:
>>>
>>> https://github.com/qsnake/cython
>>>
>>> it is actually a fork of the official Cython repo. And then Qsnake is
>>> clever enough, that when it is fetching the sources, and if there is
>>> setup.py and no spkg-install, it creates spkg-install automatically
>>> with "setup.py install" (and other default stuff), and then saves the
>>> cython.spkg package into the spkg/standard/ directory.
>>>
>>> Having all spkg-install scripts in the main repository (so in my case
>>> in this repository: https://github.com/qsnake/qsnake) is a valid idea,
>>> that I have been bouncing around too. I decided not to, to keep things
>>> localized, as sometimes nontrivial modifications are needed to the
>>> upstream packages, and the best way to do such modifications is to
>>> simply create couple git patches. Also for testing, if there is
>>> spkg-install file, committed, I can checkout the git repo for a
>>> particular package and
>>>
>>> qsnake install .
>>>
>>> and it will install the package. And I can debug it easily.
>
> Is it a reversible install?

No, currently it's just like in Sage. For reversible install, one
would have to redo every single package to be able to take things from
SPKG_LOCAL (=SAGE_LOCAL in Sage), but install into something like
SPKG_INSTALL, so that one can package it and keep track of files.

Hand in hand with this go "binary packages". If one can do
"uninstall", then immediately one can start creating automatic binary
packages. That would be super cool.

I am currently undecided whether to go with this or not. No doubt it
would be useful. If Sage goes this way, than surely we'll follow too.
Otherwise probably not, as compatibility is important. People who know
Sage should find it quite easy to play with Qsnake and vice versa.
Learning a completely new system and how it works is an obstacle.

Adding uninstall and binary packages will make everything more complex
(imagine installing the wrong binary into incompatible base
install....). Right now it's all just source packages, and possibly
one binary for the whole thing (for each platform), which is
manageable.

> What about concurrent versions?

Only if you rename the package. In this I have the same (or similar)
vision as Sage, that is to create a well tested scientific environment
with just one tested version of each package, that works with
everything. If there are two incompatible versions, then one should
change the name of the package, e.g. python -> python2 + python3. Then
it can live side by side.

> What about
> dependencies (e.g. if the version of Cython was updated, would all the
> stuff depending on Cython get re-compiled?

No. Only the other way round -- if you want to install "phaml", that
uses Cython to wrap Fortran, it will also pull in "cython"
automatically (as well as all the other packages). However, since the
dependency tree is known, we can add this feature as well, to
recompile all "rdepends" (reverse dependencies, to use Debian
terminology).

>
>> Oh, and then people can simply send pull requests to the respective
>> packages directly. So I think it solves lots of the problems raised in
>> this thread. For sage, it would have to move to github though, so it
>> might not be an option.
>
> Probably not. Is it really tied to github, or could any dvcs be plugged in?

I just made two releases last couple days, one can download it from here:

https://github.com/qsnake/qsnake/archives/master

and that is just one big source tarball, and installs completely
locally, no git is needed (it will actually install its own
automatically --- but it is not needed for the build system). Git is
only used to create the big source tarball using "qsnake -d". It can
be easily changed to "hg" in the build system (and then one needs to
move all the packages, which is simple but tedious).

Ondrej

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to