p4 stream
Create, edit, delete, or obliterate an instance of a stream A branch with built-in rules that determine which changes to propagate to files in a stream depot, and in what order. A stream specification defines a stream. A user creates a stream spec by using the 'p4 stream' command or in P4V with File > New Stream. In P4V, stream specs are visible in the Streams Graph and the Streams tab. (also known as a stream definition or stream spec).
Syntax
p4 [g-opts] stream [-f] [-d] [-P parent] [-t type] [--parentview inherit|noinherit] [name]
p4 [g-opts] stream [-o [-v]] [-P parent] [-t type] [--parentview inherit|noinherit] [name[@change]]
p4 stream --obliterate [-y] name[@change]
p4 [g-opts] stream [-f] [-d] name
p4 [g-opts] stream -i [-f]
p4 [g-opts] stream edit
p4 [g-opts] stream parentview [-c changelist# -n -o --source-comments] [--inherit | --noinherit] p4 [g-opts] stream convertsparse [-q]
p4 [g-opts] stream resolve [-a<option>] [-n] [-o]
p4 [g-opts] stream revert
Description
The p4 stream
command enables you to create a stream spec in a stream depot A depot used with streams and stream clients. A stream depot has structured branching, unlike the free-form branching of other depot types. See also classic depot and graph depot. and maintain
Helix Core Server
streams, which are hierarchical branches with policies that control the
structure and the flow of change. A stream hierarchy The set of parent-to-child relationships between streams in a stream depot. is based on the
stability of the streams, specified by the type you assign to the stream:
mainline
|
|
development
|
|
sparsedev
|
|
release
|
|
sparserel
|
|
task
|
Note
If you integrate from a classic branch or other stream depot to a task stream, the files are not copied up to the parent unless they are edited and submitted first. |
virtual
|
|
Stream contents are defined by the paths that you map. By default, a stream has the same structure as its parent (the stream from which it was branched). However, you can override the structure to ensure that specified files cannot be submitted or integrated to other streams.
By default, p4 stream
edits the stream associated
with your current workspace. It throws an error if you’re not using a
stream workspace. To learn more, see the Streams in the
Helix Core Command-Line (P4) Guide, and in particular, Stream views and paths.
A workflow to edit, resolve, and revert a stream is described at Update Streams in the Helix Core Command-Line (P4) Guide.
Private editing of streams
If a user edits a stream spec publicly and saves the spec, the changes take effect immediately. In some cases, this can affect other users in unwanted ways. For example, changing any dependency, such as a product module, might break a product build unless corresponding file changes are made as well.
Private editing of streams allows you to:
- modify a stream spec and stream depot files in isolation from other users of that stream
- test the modifications before submitting them, and you can shelve the modifications for another user to test
- improve the visibility and tracking of how the stream spec evolves because a single "atomic" changelist can contain both your edits to the stream spec and any associated code changes
The workflow for private editing of streams corresponds to your normal workflow with the p4 edit, p4 submit, p4 revert, and p4 resolve commands. These commands have been enhanced with the -So option for stream only, no files. In addition,
-
p4 revert -Si includes the open stream spec when reverting the specified list of files, and
-
p4 submit -Sx exclude stream specs edits.
See also:
- Stream spec permissions in the p4 protect topic.
- the p4 help streamcmds and
p4 help openablestreamspecs
command-line output.
streams and inheritance
The p4 stream specification (2020.2 and later) has the ParentView: field, which can be set with the --parentview parameter to either of the following values:
- inherit, which is the original behavior of streams. The inheritance is implicit, so the inherited Paths, Remapped, and Ignored values are not displayed with the child stream specification.
- Sparse streams, task streams, and virtual streams must always be inherit.
- noinherit, which means that the Paths, Remapped, and Ignored fields are not affected by the stream's ancestors. For example, the build system for a noinherit release stream continues to build even if the import path of its parent mainline stream has switched to newer libraries that the release stream does not have.
- Release, development and mainline streams can be inherit or noinherit.
- Because a mainline stream has no parent, the inherit or noinherit settings have no meaning for a mainline stream unless the mainline stream is converted to a different stream type.
- The dm.stream.parentview configurable determines whether a newly-created stream is inherit or noinherit
parentview option
The p4 stream command also has the parentview option, which can be used to convert an existing mainline, development, or release stream from noinherit to inherit, or from inherit to noinherit. See p4 stream parentview -c 1234 --source-comments --noinherit in Examples
If you convert a child stream to be noinherit, paths that are implicit in an inherit stream become explicit.
- The --source-comments option causes comments to appear in the child stream spec. Such comments begin with ##. For example:
exclude myExclude/... ## copy from //stream/main@5
indicate that version 5 of the parent stream spec is the source of this path. - You can also add manually add comments to a stream spec.
- To learn how to create a stream depot and set its StreamDepth, see Working with stream depots in the p4 depot command.
- For an explanation of the different types of streams and how to use them, see the Streams chapter in the Helix Core Command-Line (P4) Guide, including the "Update streams" topic.
Prior to the 2019.1 release
Prior to the 2019.1 release, a user could edit a stream spec privately by using the p4 stream edit command. For example,
p4 -c aStreamClient stream edit
Stream //Ace/Main@15973 - edit stream spec default change
However, in such a case, the changelist did not track edits to the stream spec. The p4 stream edit command put the current stream spec of the client into the opened state, isolating any edits made to fields that affect view generation. While the spec was open, those fields were marked with the comment #open to indicate that they were open and isolated to your client. Changes made to these fields affected your client view, but other clients were not affected. The p4 edit -So command had the same effect as p4 stream edit.
(2021.2 and later) Support for one-to-many (ditto) mapping of stream specs. See the import&
Path:
type under Form Fields and the example of ditto mapping for a stream spec.
Stream and graph depot - .git suffix and repo path
A stream can import a repo from a depot of type graph. Within the stream, the content of the import is read-only. The examples below show that:
- the .git suffix is required
- the repo path must include a specific SHA-1 or ref
@sha |
Syntax: import path/... //repo/name.git/restricted/view/path/...@sha Example: import d3/... //repo/d3.git/...@c2e37352ac84eb8f90bc2866f715 The imported data is locked at the time of the @sha. |
@ref |
Syntax: import path/... //repo/name.git/restricted/view/path/...@ref Example: import d3/... //repo/d3.git/...@refs/heads/master or import d3/... //repo/d3.git/...@master A sync updates the data to the current time of the @ref. |
See Working with depots of type graph.
Stream Components
Stream Components is an optional feature that augments client views with the addition of stream component views. The stream spec therefore includes the Components: field. For details, see Stream Components in the Helix Core Command-Line (P4) Guide.
Stream specs and triggers
Like files, stream specs can be associated with a trigger. For example, submitting a stream spec in a changelist adds the %stream%
trigger script variable. See %stream% in the Trigger script variables topic and Change-commit triggers in the Helix Core Server Administrator Guide.
Form Fields
Field Name | Type | Description | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Writable, mandatory |
Specifies the name of the stream (that is, the stream's permanent identifier) and its path
in the stream depot, in the form
Note
All streams in a single stream
depot must have the same number of forward slashes in their name. The
Helix Core administrator specifies this number in the
Error in stream specification. Stream streamname does not reflect depot depth-field streamdepth. Be aware of the Limitations on characters in filenames and entities. |
||||||||||||||
|
Read-only |
The date the stream specification was last modified. |
||||||||||||||
|
Read-only |
The date and time that the stream specification was last accessed by any Helix Core Server command. |
||||||||||||||
|
Writable, mandatory |
The Helix Core Server user or group that owns the stream. The default is the user that created the stream. |
||||||||||||||
|
Writable |
Display name of the stream. Unlike the |
||||||||||||||
|
Writable |
The parent of this stream. Must be |
||||||||||||||
|
Writable, mandatory |
The stream’s type determines the expected flow of change. Valid
stream types are
|
||||||||||||||
|
Writable, optional |
Description of the stream. |
||||||||||||||
|
Writable |
Settings that configure stream behavior as follows:
A Flow options are ignored for |
||||||||||||||
ParentView: | Writable, optional |
Defines whether the stream inherits a view from its parent.
When a development, release, or mainline stream is first created, the ParentView field can be set with the --parentview parameter. The parameter can be set with values inherit or noinherit. When creating a development, release, or mainline stream without the --parentview parameter, the configurable dm.stream.parentview determines the default value for the ParentView field. After a stream has been created, the ParentView field cannot be changed by editing the stream specification. Instead, use the command p4 stream parentview to change stream's parentview. For more details, see the output of the p4 help streamcmds command. |
||||||||||||||
Components:
|
Writable, optional |
One or more lines that include other streams' views within the current stream. For details, see Stream Components in the Helix Core Command-Line (P4) Guide. |
||||||||||||||
Writable |
Paths define how files are incorporated into the stream structure. Specify paths using the following format:
where The default path is Valid path types are:
By default, streams inherit their structure from the parent stream (except mainlines, which have no parent). Paths are inherited by child stream views. A child stream’s path
can downgrade the inherited view, but not upgrade it. (For
example, a child stream can downgrade a The
To manage files of a similar file type in your stream specs, consider using wildcards (... and *) after the final slash (/) in the path definition: share ... isolate BIN/....CLASS isolate BIN/....exe import imports/lib/*.a //depot/3rd_party/lib/*.a import imports/lib/*.dll //depot/3rd_party/lib/*.dll import imports/src/*.h //depot/3rd_party/src/*.h exclude doc/....fm Tip
In a virtual stream, when you import paths, be specific and provide Stream //project1/mainQ mainline none 'mainQ' Stream //project1/devQ1 development //project1/mainQ 'devQ1' Stream //project1/devQ1-virt virtual //project1/devQ1 'devQ1-virt' and you use Paths: import foo/... share foo/src/libs/lib1/... Although you might expect that the
Therefore, we recommend that you use this more explicit syntax:
|
|||||||||||||||
|
Writable, optional |
Reassigns the location of workspace files. To specify the source path and its location in the workspace, use the following syntax:
where
Line ordering in the |
||||||||||||||
Writable, optional |
A list of file or directory names to be recursively excluded in both:
Warning
Due to their recursive nature, large numbers of Ignored entries can be inefficient. Consider P4IGNORE as another way to prevent specific filename patterns from being added. A workspace with the following:
Paths: Generates this view: //streams/main/... ... The Lines in the
See also the Paths: field, which allows you to exclude files based on the file path rather than the file name. |
Options
|
Delete the stream, which creates a changelist, marks the stream specification as deleted, and automatically submits this changelist that records the stream deletion. A stream specification cannot be deleted if it is referenced by any of the following:
Important
See Stream spec permissions in the p4 protect topic. Deleting a stream spec:
To report on deleted streams, use
The |
||||||||||||||
|
Administrators can use the |
||||||||||||||
|
Read the stream specification from standard input. Even if a stream is locked, the owner can save the stream by using |
||||||||||||||
|
Write the stream specification to standard output. By default,
it outputs the stream associated with the current workspace. If
you pass the Warning
Limitation: Although this option requires the user have at least the list access to the stream path, it ignores any other entry in the protections table, including any minus sign (-) that would otherwise block the operation.
To report on a delete stream, use
Even If a stream is locked, the owner can view the stream by using |
||||||||||||||
|
Verbose option, which includes the automatically-generated client view for this stream. |
||||||||||||||
-c changelist# | If an @changelist specifier is included with the stream name, the (submitted) stream as of that change is displayed rather than the latest (or open) version. | ||||||||||||||
|
When creating a new stream specification, specify the stream’s parent. (This option has no effect on an existing stream specification.) |
||||||||||||||
|
When creating a new stream specification, you must specify the
stream’s type: either |
||||||||||||||
parentview |
p4 stream parentview can be used with mainline, development, and release streams to set the value of the parentview field to inherit or noinherit. Note
p4 stream parentview does not support setting the value of this field while the stream spec of the workspace client is opened. The command opens the stream spec so you can change value of the ParentView field. You can also change the value of the Paths, Remapped, or Ignored fields. Changes made to the stream spec will not be made public until the change is submitted. Once submitted, the ParentView change is part of the stream spec's integration history.
|
||||||||||||||
convertsparse |
With The conversion does not populate the converted stream, but |
||||||||||||||
resolve |
p4 stream resolve resolves changes that have been submitted to the stream spec since you opened it. You cannot submit changes to the stream spec until newer changes have been resolved. p4 resolve -So has the same effect as p4 stream resolve (see p4 help edit).
|
||||||||||||||
revert |
p4 stream revert reverts any pending changes made to the open spec. The returns your client to the latest submitted version of the stream. p4 revert -So has the same effect as the p4 stream revert command. |
||||||||||||||
--obliterate
|
Permanently deletes the stream from all metadata
and removes the stream from pending and committed changelists. This operation can be restricted to
a specified changelist by using By default, This option requires the This is distinct from deleting files with p4 obliterate. The |
||||||||||||||
-y
|
--obliterate -y performs the operation instead of displaying a preview of the results. |
||||||||||||||
|
See Global options. |
Usage notes
Can File Arguments Use Revision Specifier? | Can File Arguments Use Revision Range? | Minimal Access Level Required |
---|---|---|
N/A |
N/A |
|
As the name implies, task streams are intended to be short-lived. When you have finished using a task stream by promoting your changes to its parent, delete the task stream.
Examples
p4 stream -t mainline //streams/product1 Create a mainline stream in the depot named streams |
p4 stream -t development -P main //projectX/bruno-dev Create a development stream for project X by branching the mainline. |
p4 stream parentview -n --noinherit Preview the changes that would be made when setting the ParentView field value to noinherit. |
p4 stream parentview -c 1234 --source-comments --noinherit Associate the stream spec with changelist 1234, convert the stream to noinherit and get automatic comments about the source of the path, such as ## merge from //str/dev2@25 |
Preview the results of obliterating the specified stream. |
p4 stream --obliterate -y streamname@change
Obliterate the specified changelist of the specified stream. |
example of ditto mapping for a stream spec
One possible scenario for ditto mapping a stream spec is that you want to include a platform-independent third-party library (Lib1
) as read-only
when you edit a file in a Task stream to provide an enhancement for multiple platforms (dirWindows
and dirLinux
).
Paths:
share ...
import& dirWindows/Lib1 //other/main/dirA/fileA
import& dirLinux/Lib1 //other/main/dirA/fileA
and
View: //sroot/child5/... ... &//other/main/dirA/fileA dirWindows/Lib1 &//other/main/dirA/fileA dirLinux/Lib1
Related commands
List streams |
|
Edit template for streams | p4 streamspec |
Report on existing and deleted streams | p4 streamlog
|
Create stream depot |