[p4] Re: Perforce Configurations

Paul Andrei pandrei at foliage.com
Fri Mar 18 06:20:22 PST 2005

Andreas Axelsson wrote:
> Wouldn't the problem below be solved with an extra client spec for
> ProductX?

> I know there's no way to make a clientspec map to a specific revision of
> a file or hierarchy, like @label_001 below suggests, and that's
> something I too could wish for, but the actual mapping of components
> from depot to ProductX in this case, would work just fine with a client
> spec. If you got your team to use a script when syncing instead of
> running p4 sync //... you could add the label part there.
> Example client:
> //depot/Component1/main/... //client/ProductX/Component1/...
> //depot/Component2/branchC/... //client/ProductX/Component2/...

In order to completely specify a file/component version in Perforce, one 
has to provide its space-time coordinates: the depot path is the 
location (space coordinate) while the revision/change/label is the time 

The Perforce clientspecs are purely space mappings. They cannot provide 
any time information. That has to come from some form of executable script.

So right now, the configuration information has to be split between 
clientspecs and executable scripts. Imagine now a team of 50 people 
simultaneously working on 10 configurations. It takes discipline and 
effort from everyone to stay up-to-date. A solution built into Perforce 
is preferable.

> So what's really missing is a way to lock a clientspec to a given
> revision, right?

Yes and no. Yes because it's an important missing feature. No because 
it's not enough. Another missing piece is the capability to seamlessly 
store, version, and share configuration information through Perforce.

Using clientspecs as the main source of configuration information is not 
  appropriate. Clientspecs are local, specific to a user/workspace, and 
not easily shared among team members, while the configuration 
information is global, and associated with a codeline/branch/product. 
This disconnect is significant.

>>But the ideal solution, and this a suggestion to Perforce, if 
>>they are monitoring this forum, is to implement some kind of 
>>symbolic links in the Perforce depots themselves.
>>Take this structure, for example:
>>|    //depot/Component1/main
>>|           /          /branchA
>>|           /          /branchB
>>|           /
>>|           /Component2/main
>>|           /          /branchC
>>|           /
>>/ProductX/Component1{//depot/Component1/main/... at label_001}
>>|                    /Component2{//depot/Component2/branchC/...}
>>|                    /Module1
>>|                    /Module2
>>The notation
>>     Component1{//depot/Component1/main/... at label_001}
>>denotes a Perforce depot symbolic link (PDSL) to a frozen 
>>version of Component1, while
>>     Component2{//depot/Component2/branchC/...}
>>denotes a PDSL to the tip of Component2 branchC.
>>Of course, all Perforce commands would need to be updated to 
>>follow these links when necessary.
>>   -Paul Andrei

More information about the perforce-user mailing list