Slims
Slims

Reputation: 864

How to exclude a directory in Stream mapping in p4v

I'm using the visual client for perforce and I want to exclude a directory from the workspace. Before streams, I would just navigate to my workspace, find the folder in the tree, and exclude it (and I've found this solution in a number of other related questions I've found). However, now that I am using a stream, it won't let me do this, i have to edit the stream mapping apparently.

So I tried to add this line to the remapped box when editing the stream:

-//NumberPlus/current/Library/... //nplus-mainline/current/Library/

However I just get an error:

Error in stream specification.
Error detected at line 24
Null directory (//) not allowed in '-//NumberPlus/current/Library/...'.

EDIT: I'm in Windows 8.1, for clarification.

Upvotes: 0

Views: 8670

Answers (3)

Samwise
Samwise

Reputation: 71454

If the folder you want to exclude is specific to your machine, setting P4IGNORE locally is the easiest way to exclude it from being added to the depot.

http://www.perforce.com/blog/120214/new-20121-p4ignore

You'd set P4IGNORE to some name like "p4ignore.txt", create a file with that name, and add "Libraries" to it -- subsequent "p4 add" commands will skip over paths found in the P4IGNORE file, so those files will never get added to the depot.

If this is something that's going to be common to all workspaces of this stream (e.g. it's a build artifact that everyone is going to generate and nobody is supposed to check in), what you want to do is add an "exclude" to the stream's Paths (this will exclude it from both branch views and client views generated by that stream). E.g.:

Paths:
    share ...
    exclude Libraries/...

The "exclude Libraries/..." is basically the same thing as the exclusion line you would add to the client view, except you specify it as a relative path, you don't need to specify both sides of the mapping, and the "-" is implied by the "exclude" type. The "remap" type is if you want to keep those files but in a different depot location, which doesn't sound applicable here.

More information on defining stream views: http://www.perforce.com/perforce/doc.current/manuals/p4v/streams_views.html

Upvotes: 5

Slims
Slims

Reputation: 864

I believe I have solved this. To be clear, I wanted the folder to be completely ignored by version control. I'm using p4connect with Unity and it keeps wanting to include unnecessary stuff in my depot.

All I had to do was add this line to my parent stream in the Paths box:

exclude current/Library/...

Upvotes: 0

Bryan Pendleton
Bryan Pendleton

Reputation: 16359

You can't just edit the mappings for your client workspace if it is switched to a particular stream. The whole point of streams is that your workspace mapping is directly generated from the stream definition. So that's a feature.

It's not totally clear whether

  • you don't want the directory in the stream at all, or
  • it's valid to have the directory in the stream, but you don't want to sync it to your workstation, or
  • you want the directory sync'd to your workstation, but you want the directory to have different contents (say, from some other stream which has a different version of the library.

However, for all of these situations, I suspect the best path forward is to define a new child stream of your current stream.

You will want to define the path mappings using the "share", "exclude", "isolate", and "import" mapping types.

For example, if you just didn't want the Library/... directory at all, you'd "exclude" it from your parent.

Then that stream simply won't have that directory, and it (of course) won't be on your workstation when you sync to the stream, either.

If you wanted to have a different copy of the code in the Library/... directory, so that it became a point of intentional divergence from the parent, you'd "isolate" it from your parent to submit your own custom version, or "import" it from another stream to use that stream's Library/... directory instead.

In either case, the directory would be part of the stream, and would be sync'd to your workstation, but the contents of that directory would differ from the contents that are used in the parent stream (the exact way in which they'd differ is under your control, as you define the stream accordingly).

Documentation and some examples are here: http://www.perforce.com/perforce/doc.current/manuals/p4v/streams_views.html and here: http://www.perforce.com/sites/default/files/pdf/Streams-ebook.pdf

Upvotes: 1

Related Questions