Source Control

I am currently engaged in a battle with my source control system, CMSynergy. Generally speaking source control is an invaluable bit of kit, but this one is crap. I am beginning to believe that I would be better off with just keeping this code on my local, failure prone, hard drive. I would definitely be better off with something like CVS or Subversion.

For those of you lucky enough to unfamiliar, CMSynergy is described on it’s website as a “a task-based configuration management solution”. Basically that means that it views the world as a series of tasks. All changes must be associated with a task. However, a task it not change set, a task cannot be committed or rolled-back atomically, it is merely a traceability device.

The problem with CMSynergy is that is not designed to facilitate software development. It is designed to give managers a warm comfortable feeling that they are controlling all the changes to the system. So all changes must be associated with a task, which should (and optionally must) be associated with CR which is associated with a requirement. In agile environments, which we claim to have, maintaining traceability is pretty close to meaningless busy work because I am going to refactor quite a bit of code that is only tangentially related to the feature/bug I am working on.

The policy enforcement role of CMSynergy is embedded deep in the systems design. It truly believes that it is the center of the software development process. For example, it you modify a file and then do an update, so that you can test your teammates changes with your own, CMSynergy will happily, and without asking you, replace your modified file with the version of the file it thinks is most appropriate. Now there is a way to tell CMSynergy that the local copy of the file is the appropriate version but you have to take an explicit step for every file you modify to prevent it from being overwritten.

If you develop a source control system please realize that it is not the center of the development process and that it’s primary job is to facilitate the development of software. Pretending otherwise will cause your users significant amounts of pain and suffering.

3 thoughts on “Source Control

  1. Interesting. I’m trying to learn a little about CMSynergy at the moment having come from a background of SCCS, CVS, Subversion, darcs, etc. I had married a task with a changeset in trying to match terminology. Might you explain a little more why it isn’t the case? Can’t others say they want to ignore my task when pulling?

    The aim is to refactor much code, creating many small changesets. I did wonder if a task is too heavyweight a construction for that, with too much overhead.

  2. Let me preface this by pointing out that I am not a CMSynergy expert. In addition I have only used the, Java based, “developer” client which is less powerful than the other client whose name I do not know.

    The developer client does not have a way to pull tasks selectively (at least as far as I can tell). My experience so far is that CMSynergy is a straight up file based version control system like CVS. When someone else checks in changes and you do an update you roll forward on to their changes automatically. So pretty much you end up with a slow CVS which will overwrite your changes if you are not careful. It does version directories, though.

    I believe that the task metadata may usable when creating baselines, which is what CMSynergy uses to determine the correct version a files to check out. Unfortunately, it is not clear to me the exact mechanics of baselines and releases so I really cannot elaborate more .

  3. Thankss for taking the time to reply.

    The other GUI client is the `Motif’ one, even on Win32. Most people complain it feels clunky as it isn’t the platforms native GUI toolkit, hence the Java incomplete GUI.

    I think baselines are partially there to help cut down the number of tasks that have to be presented in the UI. Somewhere, I saw 10-50 tasks being mentioned as a typical usable number which would suggest they don’t equate to a changeset and baselines to CVS tags.

    And since CMSynergy’s documentation isn’t online it’s hard to find answers. :-( http://www.cmcrossroads.com/ seems to have some CMSynergy resources.

Comments are closed.