Monday, December 19, 2005

Source Code Versioning systems

I've been using a couple of versioning systems now. Some I like,
some I highly dislike.

I've used MS VSS, cmm, cvs, ClearCase, svn and many have interesting
features, but none comes close to satisfying all of the needs that
I have as a developer. Some of them are rich in features, but slow
in operation.

This is one of the things I am thinking of. Developing a module
that can use a web-based front-end on Tomcat to organise sources,
backed up by a database. A client-side daemon process connects to
the server-process and retrieves XML-based repository information plus
optionally different streams of codebases.

CVS almost forces you to look at a single view at a time, unless you
manually set it to do something different. CVS keeps the repo files
inside the same directories, which makes compilation and source management
quite difficult unnecessarily.

Most of the tools were written in C/C++ with the largest overhead in
file management. Which shows clearly that with Java, where files can
be managed easier ( no more string-length checking, etc. ), this can
be implemented much easier and quicker. I am thinking of using Derby
as a local database implementation, rather than individual files to
record information, and to use XML for transferring repository information.

What I want is a system that:
  • Shows baselines and streams of the repository in an easy manner, like an overview and I can choose from them.
  • Shows a description of what the baseline means
  • Lets a user download the whole baseline or stream locally without too much fuzz ( setup view, create local repo, etc... )
  • Can import a new project/baseline through a GUI system
  • Automatically updates local files when updates happen remotely.
  • Does not create alien files within the source directory
  • Can let users work with multiple streams locally, without having to redownload or do extra stuff for diffs, etc.
  • Should not use a network-mapped drive.
  • Allows easy baseline management.
  • Enables good overviews for extra meta-information on repos ( no lines, no changes, what changes are, searching for changes, etc ), maybe even up to annotation.
Well, just some good ideas anyway, now up for the design :)

No comments: