AccuRev streams vs branches

Damon Poole (CTO of AccuRev) wrote a teaser post in AccuRev blog about AccuRev streams: Damon Poole: “Streams vs Branches”.

This article links to a whitepaper: Damon Poole: “Stream-based architecture for SCM.

As far as I understood from the first reading, idea of streams is very straightforward and simple concept making “streams of development” a first-class object in AccuRev repository. Streams are very easily presented on UI level, making them easily understood for software developer and release manager. Branches, tags, and private workspaces could be superseded by various flavors of streams.

E.g. “Release 4.0″ is a stream. “Release 4.0.1″ is the child stream. Changes made in 4.0.1 could be “promoted” to 4.0. When we start the “5.0″ line of development, it automatically gets everything that was promoted to 4.0, either from older version or from bug-fix version (4.0.x).

I understand that streams could be enormously useful if they actually do the merging well. Technically this is handled easily by modern standards. Something like this could be done (and may be is already done) in many GUI clients for most open source version control systems.

Second part of the whitepaper is dedicated to AccuRev TimeSafe, which is the underlying repository format. I have to remark that the article only compares TimeSafe features with CVS and ClearCase repository features. Those are embarrasingly easy targets for criticism. Why are modern repository formats such as Subversion FSFS and Git not mentioned? Are they technically superior? ;)

Article on Timesafe: Damon B. Poole “The Timesafe Property - A Formal Statement of Immutability in CM”.

See also: DaveOnSCM: “Agile: Branches vs. Streams”.

Recent posts on similar topics

2 Responses to “AccuRev streams vs branches”

  1. lvz Says:

    well, a picture worth a 1000 words:
    http://www.fepus.net/component_dev_accurev.jpg
    This is a screenshot of the “stream browser”, here Dave from AccuRev explains how to achieve component-based development (full discussion here [http://www.cmcrossroads.com/option,com_smf/Itemid,180/topic,73272.0.html])
    “Application” is the root stream, “Components” & “Products” are virtual (pass-thru) streams here for categorization purpose only. then there’s a bunch of streams for each component or product (Niko, WebForms, etc.) with a full (and possibly different!!) workflow illustrated by a stream hierarchy. the yellow streams are the sandboxes (workspaces) for each team member.
    brilliant tool! and that’s just in a nutshell.

  2. DamonPoole Says:

    Thanks for your post! Regarding a few of the points you brought up:

    In AccuRev, merging handles true renaming and true common ancestor determination. It also handles patching and reverting of individual versions. This capability has been there from the start and is an integral part of the SCM part of the architecture. So, yes, AccuRev does merging very well.

    An important point about streams is that they are much more than a GUI convenience. It is not possible to bolt-on streams if you have a branch and label based architecture. I had originally intended to do it that way, but it turns out that the data models are too different. Sort of like building Ethernet out of Token Ring. ClearCase UCM takes the approach of building streams on top of branches and labels, I’ll leave it to somebody else to comment on how well that works in practice.

    While the paper is pretty good, nothing beats seeing streams in action: streams demo.

    As for the paper on Timesafe, I wrote that years ago and haven’t gotten around to updating it yet. SVN and Git are definitely better in this regard than CVS and ClearCase, but without having Timesafe as a design goal, it is difficult to achieve it in practice. For instance, like CVS, SVN doesn’t keep information about which branches you’ve checked out into your working directories in the database so you can’t easily compare two working areas and you find out definitively: “I am using this branch in this directory and that branch in that one.” From the SCM’s perspective, you checked out a bunch of versions. And since that information is just sitting around as individual file/version information on your local disk, it certainly doesn’t pass the Timesafe test of being versioned. That is, this directory was using this branch last week and this other branch today.

    Lately, I’ve been thinking about updating both papers, especially the Timesafe one since it is was written as a research paper and is a bit obtuse.

Leave a Reply

You must be logged in to post a comment.