February 29, 2012

Virtual Streams: Windows into Big Projects

Streams

This is the first in a three part series about virtual streams.

Perforce Streams are pretty new, rolling out in the 2011.1 release. But of course we’ve been thinking about codeline management and streams for many years, so we’re already moving ahead with some good improvements. In the upcoming 2012.1 release, we’re rolling out a better way to present a smaller view of a big project.

A Narrower View

Let’s say we’ve got a project made up of three modules, db, gui, and src. We want to manage these three modules as a single project, because that’s how we release and maintain it.

Most of the time, there are separate teams working on each module, and they don’t need a full copy of the project’s data until they start on integration work. In other words, each developer only wants the data from a single module in their workspace for daily work.

How do we manage this problem now? If we’re not using streams, we can use template workspaces for each team, so that each team only sees the module they work on. But I’d rather have a way to centrally manage the views, so that the team members don’t need to worry about it.

If I switch to streams, I can keep the entire project in an integration stream, and create three child streams, one for each module and team. The child streams will share one module for active work.

Stream model

But that’s not quite what I want either. I don’t really want to branch any files in those three child streams; that adds an extra merge step in order to make the new work show up in the integration stream. What I really want is a child stream that lets me narrow the view (limit the files present in the stream and its workspaces) without actually branching anything.

In the 2012.1 release, we’re introducing that type of stream. It’s called a virtual stream, and it lets you narrow the view of the parent stream without actually branching the files.

Stream model with virtual streams

In other words, a virtual stream has no files of its own. If you work in a virtual stream, any changes you submit automatically flow through to the parent. Any new changes in the parent stream that are visible to your virtual stream will automatically be available to you.

That’s perfect: now each team only sees the module they work on, and all their work still is submitted directly to the integration stream. If someone wants to see the entire project, they just move their workspace from the virtual stream to the integration stream.

In follow-on posts I’ll talk about another type of problem that a virtual stream helps to address, and then dive into some nuts-and-bolts details.

Read More: Part 1 | Part 2 | Part 3