[e-lang] Source control for E?
Kevin Reid
kpreid at attglobal.net
Wed May 10 07:52:26 EDT 2006
On May 10, 2006, at 3:29, Dean Tribble wrote:
> It would be useful to get the E code under source control. MarkM
> asked me to seed a short discussion of options, both to determine
> which one to use and because I want to find out if the situation
> has changed since I last looked.
>
> CVS: Open souce. IDE support. Poor branch support. Poor label
> support. Poor file moving/renaming. Poor reliability (e.g., no
> atomicity). Just say no.
No offline/local "what-have-I-changed" or "diff" support, unlike
Subversion and Darcs.
Diffs cannot be made to include added files unless you have write
access to the repository.
Mangles binary files by default.
Clunky checkout process (set CVSROOT or use -d twice, cvs login).
Subversion and Darcs both allow checkout by a single command with a
single URL argument.
> Subversion. Open source. IDE support. Branches?? Labeles??
> Moving?? Good atomicity? A possibility.
By convention, branches (and tags) are done with (history-preserving)
copies. This works fine except that if you partially merge from one
to the other, Subversion does not track which revisions have been
merged. There are several usage patterns to simplify this.
Moves are represented as copy-with-history plus delete (this is To Be
Fixed, but not soon), which works fine for moving back in history but
not so well for forward (e.g. if I have changes in my WC to a file,
and then update such that that file is moved, svn will treat it as
changes to a deleted file, and the new file won't have the changes).
All commits (which must be to a single repository, and from a single
working copy or URL) are atomic.
> Perforce. Not open source, but can be used for open source for
> free. IDE support. Excellent branch support. Excellent label
> support. Good-excellent file move support. High reliability/
> performance. Less familiar? A possibility.
I haven't used Perforce.
> Darcs. Wierd :-)
I've used Darcs a little bit. It seems reasonably easy to use, and
particularly, makes it easy for people to submit patches back to an
'official' repository. However, I haven't done anything complicated
with it.
Since Darcs Is Weird, I'll give an example of how I've used it:
There is an open source project with one publicly readable
repository. My local machine does not run a public web server.
To set up, I retrieved a copy of that repository using 'darcs get' on
my local machine and on a remote machine to which I have SSH access;
that repository is located in a directory published by that machine's
web server.
In order to get new changes, I run 'darcs pull' on my local
repository, which brings in patches which are not yet in my repository.
After I've changed something locally, 'darcs whatsnew' tells me what
I've changed (like 'svn status' or 'cvs update -n'); 'darcs record'
allows me to create a patch from it, which then goes into the local
repository only.
To publish changes, I then use 'darcs push' over SSH to copy those
patches to the my own public repository. This step would not be
necessary if I ran a publicly visible web server on the machine I
work from.
--
Kevin Reid <http://homepage.mac.com/kpreid/>
More information about the e-lang
mailing list