Category: Streams
The Professional Serivces team at Perforce is excited about the new Perforce Streams course that was just released on our eLearning portal. Our curriculum developers and subject matter experts collaborated to compose a 2-hour course that enables you to:
- Describe codelines and branches using terminology appropriate to streams
- Use the streams GUI widgets within P4V to leverage the power of streams' built-in workflows
- Quickly switch workspaces and propagate changes across streams
- Create and populate stream depots and stream hierarchies
- Establish naming conventions for streams and stream folders
- Configure and maintain client workspaces in streams
- Reparent streams
The hands-on labs that are part of this course provide a test bed for rehearsing various concepts such as creating release streams, importing projects into a stream, and refactoring through reparenting. The quiz at the end of the course tests and validates your newly gained knowledge, and...
Perforce streams let you capture important information about what actually goes into a codeline. Using stream paths, you can select active modules (modules that are branched and worked on), import other modules as read-only dependencies from the parent stream, and so on. (For more information on stream paths, read this post by Laura Wingerd.)
Of course, the stream paths may change over time. Let's say that originally you were importing version 1.0 of an external library, so you had a statement like this in your stream definition:
import acme/... //depot/acme-lib/rel/1.0/...
At some point there's a 1.1 patch for this library that you want to work with, so you pull in that new version instead.
import acme/... //depot/acme-lib/rel/1.1/...
Now let's think about how to reproduce the state of this codeline in the future. Maybe I shipped an important milestone as of changelist 100, and at that time I was using the 1.0 version of acme-lib. If I create a workspace for this stream and run p4 sync @100, I won't...
This is the last of a three-part series on virtual streams.
In this post I'll try to answer a few nuts-and-bolts questions about virtual streams. If you have any questions that I didn't address here, let me know and I'll start a FAQ in the forums.
Creating virtual streams
Creating a virtual stream is really easy, since there's no actual branching involved. You just create a new stream, set the Type to virtual, choose the Parent stream, and adjust the other options (particularly the paths) accordingly.


If you are using P4V's Stream Graph, the Parent field will be filled in automatically if you right-click on the parent stream and select Create New Stream from.

What happens if you make a child stream from a virtual stream?
That's fine and expected. Let's say you have a child stream that is less...
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.

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.

Now I can move all...
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...
Perforce Release 2012.1 introduces the virtual stream, a powerful abstraction of the stream feature. A virtual stream isn't actually a stream at all -- it is simply a filtered view of its parent stream. Creating and using a virtual stream, however, is the same as creating and using a real stream. I'll demonstrate some of that here, building on the stream view explanation I gave in an earlier blog.
Virtual Streams as View Filters
Let's say you're working at Ace Engineering, where there's an active development branch defined thus:
Stream: //Ace/dev
Parent: //Ace/main
Type: development
Paths:
share ...
//Ace/dev is a depot path, and it contains files. You can work with these files by switching your client workspace to the //Ace/dev stream. But what if the //Ace/dev path is huge? And what if you have a team of developers who work with only a small subset of these files? Yes, you could branch a smaller child stream from //Ace/dev. But now, with virtual streams, you don't need to. You can create a virtual child stream that simply narrows the //Ace/dev stream's view. For example:
...

Laura Wingerd speaking at the Splash Down Launch Party on November 3rd.
More than 100 attendees at the November 3 launch party at the Perfortress heard informal remarks from the visionary behind the new Streams feature in Perforce. Recently retired Vice President of Product Technology Laura Wingerd, who still consults with Perforce after 15 years with the company, explained how Christopher Seiwald, Founder and CEO, gently shot her down when she first proposed the feature.
"I wanted Perforce to offer a stream-like branching and merging feature a long time ago," said Wingerd. "But Chris said there were many ways to do branching and merging with Perforce, and that we just didn't have an answer to the question of which was best." However, as Wingerd spent time among Perforce’s most productive customers and observed their practices, the kernel of an answer began to form.
"Streams was born out of customer experience," said Seiwald. "You can have people pile in to the server and have 100 or...

