# Task: output list of 'opened' files, using local pathnames. # # status: tested on Win/NT using perl 5.6 with p4perl API # num of calls to 'p4': 2 # room for optimization/improvement: add getopts call # # Copyright 2004 Perforce Corporation, Inc. All rights reserved. use P4; my $p4 = new P4; $p4->ParseForms(); $p4->Init() or die "Failed to initialize 'p4' object!"; $p4->Tagged(); #----------------------------------------------------------- # first call to P4: 'p4 client -o' # Note that it's easier to get the client root dir from # the 'client spec', hence the "FetchClient" call. #----------------------------------------------------------- my $info = $p4->FetchClient(); $cl_name = $info->{"Client"}; $cl_root = $info->{"Root"}; #----------------------------------------------------------- # second call to P4: 'p4 opened' #----------------------------------------------------------- @ret = $p4->Opened(); #----------------------------------------------------------- # Now, loop through the output of 'p4 opened'. The tagged # output gives us a client-syntax version of the name # in the form "//clientName/rest-of-local-path", # so we substitute the client root dir before printing. #----------------------------------------------------------- $oldtag = "//$cl_name"; foreach $h (@ret) { $localFile = $h->{'clientFile'}; $localFile =~ s/$oldtag/$cl_root/; print "$localFile\n"; }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 4312 | Jeff Bowles |
Adding a number of example scripts that show how to get to Perforce data for a variety of scripting languages and variety of simple tasks. Note that Perl/Python/Ruby (and variants) are included, but shell/batch/DCL/applescript are not. (Am trying to stick with somewhat-portable approaches, to make comparisons easier.) Each program is written in the following languages/configurations: 1. Perl, calling "p4 -Ztag" for data 2. Perl, calling Tony Smith's "P4Perl" module 3. Python, calling "p4 -G" for data 4. Ruby, calling "p4 -R" for data 5. Ruby, calling Tony Smith's "P4Ruby" module The programs do the following: a. compare client specs to users (find old clients) b. compare two labels c. determine which client specs use compression. d. determine which files need to be "p4 add'ed." e. output list of 'opened' files, using local pathnames. |