AccuRev streams neatly model all these aspects of development tasks. The (relatively few) files that a developer changes for a task become active in a particular stream. Typically, this occurs when the developer records new versions of the files. To complete the task, or to mark an intermediate milestone, the developer delivers the changes to the parent stream, using the
promote command. The files become active in the parent stream, and inactive (not under active development) in the child stream.
What about the other streams? Each stream in the hierarchy contains some version of the file; if a file is not active in a particular stream, the stream automatically
inherits an active version from a higher-level stream. The diagram below shows how the four active versions fill out the entire stream hierarchy:
AccuRev features a special kind of stream, called a pass-through stream. A version that is promoted to such a stream automatically passes through to the parent stream. The file doesn’t become active in the pass-through stream; it
does become active in the parent of the pass-through stream.
Pass-through streams are useful for grouping lower-level streams. (Most commonly, the streams to be grouped are ones built into user workspaces. For a full discussion of workspaces, see AccuRev Workspaces and Reference Trees.) For example, suppose a “swat team” of four programmers often moves from project to project. AccuRev accomplishes the task of moving a programmer from Project A to Project B by
reparenting the programmer’s personal stream: making it a child of the Project-B stream instead of the Project-A stream.
AccuRev has an advanced include/exclude facility, which vastly increases the flexibility of a depot’s stream hierarchy. You can configure any dynamic stream (or workspace) to include just
some, not all, of the elements from its parent stream; the subhierarchy below the stream inherits this configuration. This facility makes it easy to logically partition a source tree, so that different development projects can work on different parts of the source code, and so that different development groups cannot even see each other’s work.