
I took a look at the Subversion site [1], and see three features which appear to be quite compelling. [[ Features of Subversion * Most current CVS features. Subversion is meant to be a better CVS, so it has most of CVS's features. Generally, Subversion's interface to a particular feature is similar to CVS's, except where there's a compelling reason to do otherwise. * Directories, renames, and file meta-data are versioned. Lack of these features is one of the most common complaints against CVS. Subversion versions not only file contents and file existence, but also directories, copies, and renames. It also allows arbitrary metadata ("properties") to be versioned along with any file or directory, and provides a mechanism for versioning the `execute' permission flag on files. * Apache network server option, with WebDAV/DeltaV protocol. Subversion can use the HTTP-based WebDAV/DeltaV protocol for network communications, and the Apache web server to provide repository-side network service. This gives Subversion an advantage over CVS in interoperability, and provides various key features for free: authentication, path-based authorization, wire compression, and basic repository browsing. ]] I've recently realized that directory moving and renaming is a pain with CVS. I also think that support for an open standard protocol (WebDAV) is, in the longer term, a real win because it should mean greater client availability across different platforms. The choice of staying close to CVS except where there's a reason not to will hopefully ameliorate the learning-curve concerns. Just a datum. #g -- [1] http://subversion.tigris.org/ ------------ Graham Klyne For email: http://www.ninebynine.org/#Contact

Graham Klyne
I took a look at the Subversion site [1], and see three features which appear to be quite compelling.
IMHO, Subversion is definitely a better, easier-to-use, CVS.
I also think that support for an open standard protocol (WebDAV) is, in the longer term, a real win because it should mean greater client availability across different platforms.
If/when clients are updated to actually implement the protocol in a compatible fashion. Last I looked, there was some support in IE, but otherwise a distinct lack of alternative implementations.
The choice of staying close to CVS except where there's a reason not to will hopefully ameliorate the learning-curve concerns.
I don't think we should overplay this point. Revision control is, for most users, most of the time, a simple cycle of update, (conflict resolution), change, commit. Branching and merging of brances is complicated with CVS/SVN-type of revision control, but I don't think that's a compelling argument for not changing to something that makes it easier :-)
Just a datum.
Just an opinion. -kzm -- If I haven't seen further, it is by standing in the footprints of giants

Graham Klyne
I took a look at the Subversion site [1], and see three features which appear to be quite compelling.
Subversion fixes several of CVS's major problems, that's for sure. It doesn't really add any new abilities, however, for a distributed community like the Haskell community. (At this point, I have spent a few years using CVS, a few months with SVN, couple months with arch, and a few days with darcs, along with a summer where we used Clearcase at Cisco Systems, so I've had a decent survey of what's out there.) When I was using svn, I was very pleased that I could run diff on my laptop without having access to the Internet, but that's about the only thing that svn does that helps it to be useful for a distributed community. The Haskell community has been talking a lot lately about how we want to be less centralized, especially with regard to library development. There are others, but let me explain my most compelling use case for a distributed system like darcs or arch. 1) Joe Hacker discovers Haskell, becomes a 1337 developer, and is ready to try extending a large project over a longish period of time 2) But no one knows Joe Hacker, so there's no way we're going to give him write access to a CVS (or SVN) repository for a mission critical tool and invite him to create his own branch. Maybe he's too shy to ask, because he's not convinced that he can really implement the feature he wants to add. 3) So Joe Hacker grabs the latest CVS branch and starts hacking away. Pretty soon, he needs version control, since he's a 1337 hacker, he knows how important it is. 4) So he imports his branch into his own local version of CVS. Now we have two completely different repositories who won't ever share log information. 5) Meanwhile, the mission critical tool he's hacking on is diverging from his code. He has to merge every so often. How does he do this? He remember the date he last synched, gets a diff between the synch date and the current version, patches his new version, resolves conflicts, and he's all set. 6) Oh, and if he's backporting his features to the stable version, he'd better get a diff of his own work and patch the old version as well. If upstream has added patches to the old version too, well he has to get a diff with that version and apply that patch. 7) Next time he wants to backport his patches, he's in big trouble. His "unstable" branch is polluted by upstream's changes, and there's no way to extract his own changes without browsing through diff hunks. Oops, looks like he should have used 3 branches or something. There are probably tools to make this easier with diff & patch. 8) If his work is accepted in the end, merge with mainline. This is the best he can do; if he forgets to remember his sync points (because he wasn't planning ahead), it's going to be harder. This demonstrates a very important point. CVS has been around for so long, and hasn't been replaced by something better, because all of its problems can be worked around (and also because it's a great tool). But that doesn't mean that it's the perfect tool for every product. But with a distributed version control system like darcs or arch, this becomes much easier. Now, Jane Hacker can follow this procedure (whose numbering scheme is not relevant to the above): 1) She discovers Haskell 2) She uses "darcs get" to grab the latest tree. No extra import step is required, she just uses "darcs record" to record her changes. 3) As the mission critical tool diverges, she uses "darcs pull" to get the latest changes. Darcs prompts her for each patch, or she can use the --all flag. 4) To backport to the stable version, she uses "darcs pull" against her own version. She can do this before or after syncing with upstream. Darcs will prompt her with each patch and ask her if she wants to apply them. She says "no" to the upstream patches. She also can use three branches to make this easier. (All this is true of arch as well, but darcs has the great advantage of being written in Haskell, and actually a bit easier to use. I'm sure there are other advantages too, I just haven't used it that long.) I can tell you from experience that this has happened to me before. I'm sure it happens all the time when a hacker joins a new community. When Colin Walters and I were hacking on Debian's APT tool, we couldn't get access to their repository. In my hmake hacking, I didn't ask for access to the repository because I'm not 100% convinced that hmake is the right choice for what I'm trying to do. I nevertheless need to use version control in the mean time. There are other compelling use-cases as well. For instance, in packaging darcs for Debian, it's very convenient to be able to cherry-pick changes from the main branch. By the way, I feel that the cost of learning a new way of doing version control is over-hyped. For one thing, you can use arch just like CVS and still give your users the distributed advantages. For another thing, it's just not that hard to learn. My company hired a new guy the other day, and he read the arch tutorial one morning and that was all he needed. So anyway, as others have pointed out, no one is suggesting that we move everything over to an experimental VC system, even in the medium term, especially something as large and mission-critical as fptools. Having a project like the Library Infrastructure Project in a distributed VC system will be a good experiment, though. Someone is working on a CVS <--> darcs bridge for this, so perhaps we can make everyone happy. peace, isaac

Isaac, You paint a fairly compelling picture. I think that the big advantage of darcs that you describe is that it can merge changes from repository to repository, rather than just from sandbox to repository. That seems useful to me, because I do use a locally-managed respository for all my work... it's the way I do backups. At 13:21 19/03/04 -0500, Isaac Jones wrote:
By the way, I feel that the cost of learning a new way of doing version control is over-hyped. For one thing, you can use arch just like CVS and still give your users the distributed advantages. For another thing, it's just not that hard to learn. My company hired a new guy the other day, and he read the arch tutorial one morning and that was all he needed.
Well, maybe the fear of learning curve is because CVS is quite opaque in some respects. Your description of Darcs made it seem easy enough. Though there is still the complexity of setting up a local repository to consider. Other questions I have: - ease of displaying differences between working copy and repository? - GUI front-end for exploring repository? - repository-hosting requirements? - ease of setting up secure connections to a remote repository? - support for CVS-like change-logs, etc ($Id: $, $Log: $, etc.)? #g ------------ Graham Klyne For email: http://www.ninebynine.org/#Contact

Graham Klyne
You paint a fairly compelling picture. I think that the big advantage of darcs that you describe is that it can merge changes from repository to repository, rather than just from sandbox to repository. That seems useful to me, because I do use a locally-managed respository for all my work... it's the way I do backups.
I use the same feature to allow concurrent remote and local development and transparent synchronization between both repositories.
Well, maybe the fear of learning curve is because CVS is quite opaque in some respects. Your description of Darcs made it seem easy enough. Though there is still the complexity of setting up a local repository to consider.
"darcs inittree" creates a new repository in the current directory. "darcs get http://www.ScannedInAvian.org/repos/wikiwiki" sets up a local copy of a remote repository.
Other questions I have: - ease of displaying differences between working copy and repository?
"darcs whatsnew" shows you unrecorded changes.
- GUI front-end for exploring repository?
I haven't tried the wxHaskell gui, but the cgi repository browser is nice[1].
- repository-hosting requirements?
filesystem, and an http server if you want others to be able to pull from your repository.
- ease of setting up secure connections to a remote repository?
You can use ssh[2] or sudo to push to a repository
- support for CVS-like change-logs, etc ($Id: $, $Log: $, etc.)?
I don't know what's involved in CVS-like ChangeLogs, can you explain that one? I think it might be the same as "darcs changes" but I'm not sure.
From what I've seen on the mailing list, $Id and friends aren't likely, because of the design of darcs.[3].
[1]http://www.scannedinavian.org/cgi-bin/darcs links to my repo browser. [2]http://www.abridgegame.org/darcs/manual/node5.html#SECTION005100000000000000... ssh and sudo both mentioned here. [3]http://www.abridgegame.org/pipermail/darcs-users/2004-February/001089.html -- Shae Erisson - putStr $ fix("HELLO\n"++) - http://www.ScannedInAvian.org/ OSDir: Community building... interesting... what's the secret sauce? Limi: Irresponsible sleep patterns. -- Alexander Limi, one of the Plone founders http://osdir.com/Article199.phtml

Shae writes:
From what I've seen on the mailing list, $Id and friends aren't likely, because of the design of darcs.[3].
[..]
[3]http://www.abridgegame.org/pipermail/darcs-users/2004-February/001089.html
This is fatal - I use $Id$ all the time. We have some very large specification documents that we control using CVS, and it is critical when we read them that we know what version they are. We do the LaTeX equivalent of "set header to $Id$", and then all our documents are versioned. Having the version anywhere else but in the document itself would be wrong, because they could get out of sync. (sorry for OT) --KW 8-)

[I've CCed the darcs list and (hopefully) set the reply-to header to just there. See http://www.abridgegame.org/mailman/listinfo/darcs-users for archives or subscribing.] On Mon, Mar 22, 2004 at 01:21:23PM +0000, Keith Wansbrough wrote:
Shae writes:
From what I've seen on the mailing list, $Id and friends aren't likely, because of the design of darcs.[3].
[..]
[3]http://www.abridgegame.org/pipermail/darcs-users/2004-February/001089.html
This is fatal - I use $Id$ all the time. We have some very large specification documents that we control using CVS, and it is critical when we read them that we know what version they are. We do the LaTeX equivalent of "set header to $Id$", and then all our documents are versioned.
Having the version anywhere else but in the document itself would be wrong, because they could get out of sync.
I'm told $Id$ expands to something like: $Id: Foo.hs,v 1.2 2003/03/04 03:22:34 myuser Exp $ OTTOMH I think the tuple (tagname (~= version), date of tag creation, e-mail address of tag creator) is unique and, along with the filename, is essentially the same information. To get around the modification of source files problem in Shae's URL perhaps "darcs flatten foo" or somesuch could be used to explicitly say "I'm taking foo away to print now so please expand $Id$ in it". It could complain if the current repo state isn't tagged (or prompt you for a name to tag it with) or if foo has unrecorded changes. Thanks Ian

Shae Matijs Erisson
Graham Klyne
writes:
You paint a fairly compelling picture. I think that the big advantage of darcs that you describe is that it can merge changes from repository to repository, rather than just from sandbox to repository. That seems useful to me, because I do use a locally-managed respository for all my work... it's the way I do backups.
Yep - currently, I must have my SVN repo locally on my laptop, and manually copy it to an NFS-mounted disk which is backed up regularly. With a distributed model, I could have repositories both places, and sync them when online.
"darcs inittree" creates a new repository in the current directory. "darcs get http://www.ScannedInAvian.org/repos/wikiwiki" sets up a local copy of a remote repository.
In case it isn't obvious, there isn't really any difference between a 'working copy' and a 'repository' in darcs (nor arch, IIUC). You 'get' the tree, and start working on it. Changes are 'record'ed locally, and 'push'ed (or 'pull'ed) from the other end) for synchronization.
- repository-hosting requirements?
filesystem, and an http server if you want others to be able to pull from your repository.
..over HTTP. You can pull if you have filesystem read access, and push if you have write access, too. (There's recently been some talk on the darcs list about some changes here, but I think this is still correct)
- ease of setting up secure connections to a remote repository?
You can use ssh[2] or sudo to push to a repository
Or use procmail and GPG-signed email. A bit complex, but there's good documentation with the necessary steps. -kzm -- If I haven't seen further, it is by standing in the footprints of giants

Graham Klyne writes:
I took a look at the Subversion site [...]
Just for the sake of adding even more confusion to the already large variety of options, I'd like to mention Monotone http://www.venge.net/monotone/. Of all the VC systems I have used, this appears to be the "most" distributed one. It's also the only VC system I know, which uses strong cryptography to properly authenticate patches. (Darcs authenticates -- if I remember correctly -- the e-mail in which the patch is submitted, but not the patch content itself as it's stored in the database.) I have been using Monotone for several months now, and I am quite happy with it. Its repository architecture would probably work very well for the Haskell community, especially since it supports a global hierarchical name space, exactly like Haskell modules do. Peter
participants (8)
-
Graham Klyne
-
Graham Klyne
-
Ian Lynagh
-
Isaac Jones
-
Keith Wansbrough
-
Ketil Malde
-
Peter Simons
-
Shae Matijs Erisson