Category: Features & Releases

New Perforce Plug-in for Visual Studio
At Perforce we’re pretty agnostic about development tools and processes. Whatever your IDE of choice, we want to either offer a great integration or make it easy for someone else to provide one. So, I’m pretty excited to announce our new Perforce Plug-in for Visual Studio (P4VS). This new plugin makes Perforce a first class citizen in the Visual Studio world.
Highlights
P4VS naturally lets you perform all of your daily interaction with Perforce, like checking in code and viewing file history, directly from the IDE. That in itself is a big win: save a few seconds here and there, and pretty soon you’ve earned yourself an extra coffee break a day.
Accessing basic version control functions from the IDE, like checking in files, is important. But if you’re a power user looking for a bit more, P4VS won’t disappoint you. P4VS is fully compatible with Perforce Streams, and the...

Have you ever wished you could literally take your entire development workspace home with you, file history and all? Well, now you can, thanks to P4Sandbox.
P4Sandbox, which is part of the 2012.1 beta release of Perforce, gives you a private repository for local branches and development work. That local repository is very portable. A regular P4Sandbox instance looks like this on disk:
LOCAL-BRUNO-JAM-MAIN
├───.p4sandbox
└───client
└───depot
└───Jam
└───MAIN
└───src
The .p4sandbox directory contains your local Perforce repository data, while the client folder contains your workspace. You can easily zip up the top level folder (LOCAL-BRUNO-JAM-MAIN in this example), stick it on a USB stick, and take it home with you. ...
Continuous integration and Agile development are two distinct but related trends in software development. Continuous integration (CI) is really about increasing transparency, but usually manifests itself as automated build and test routines. To put it very briefly, building and testing early and often is a great way to make sure that you’re actually building what you wanted to, and expose potential problems early on.
Agile development has several foundational guidelines, and increased transparency is perceived as a key benefit of Agile development. In practice Agile teams like to test their work immediately after (or in some cases before or during) development, to make sure that the delivered product actually delivers value to the customer. That again has increased the need for rapid automated build and test cycles.
The natural culmination of these trends is often characterized with words like massive and extreme. One of our customers presented a talk at the last user conference on ...
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...

