March 2, 2012

Task Branch Management with Virtual Streams

Streams

This is the second in a three-part series on virtual streams.

One of the first things you learn when you graduate to a world-class version management tool is to love branching. That's a tough transition if you came from a tool that did branching poorly, but there are no poisoned apples in Perforce's tree of branching wisdom. There is a small worm in one of those apples, however, and we've now got a better way to deal with it.

Let's say that I manage a team where each developer uses her own task branch. My team is working on a set of new features for an upcoming release code-named Thunder.

Stream model

But now the product manager tells me that she's shuffling the priorities, and my team's work is now targeted for the Lightning release. Uh oh – I'd have to reparent all of the task branches used by my team.

A better model is to use a very lightweight container stream for my team.

Stream model with container stream for team

Now I can move all of my team's task branches to the Lightning release just by reparenting bruno_team.

Stream model after move to new release

The fly in the ointment (worm in the apple?) is that the container stream, bruno_team, branches files from lightning, when I don't actually need to branch anything until I hit the task branches. And while I don't mind branching, there's no sense creating a bunch of merge records unless it adds value. In this case, it just means an extra merge step when someone from the team is ready to push completed work to the Lightning stream.

Luckily, I can now use a virtual stream as that lightweight container. It still lets me easily group all the task branches for my team, and move them as a unit. But a virtual stream, as I described in an earlier article, doesn't actually branch or contain any files.

Stream model with virtual container stream

Problem solved! In my next article on virtual streams, I'll dive into the nuts-and-bolts of creating and using virtual streams.

Read More: Part 1 | Part 2 | Part 3