#!/usr/bin/perl -w # -*- perl -*- use P4CGI ; use strict ; # ################################################################# # CONFIGURATION INFORMATION # All config info should be in P4CGI.pm # ################################################################# # # P4 search for file # Search depot for files matching spec # ################################################################# # Get file spec argument my $filespec = P4CGI::cgi()->param("FSPC") ; &P4CGI::bail("No file spec.") unless defined $filespec ; # Add //... if not there if($filespec !~ /^\/\//) { $filespec = "//...$filespec" ; } while($filespec =~ s/\.\.\.\.\.\./\.\.\./) { ; } ; while($filespec =~ s/\*\*/\*/) { ; } ; # Check if file exists my @matches ; &P4CGI::p4call(\@matches, "files $filespec" ); print "", &P4CGI::start_page("Search result for <br><code>$filespec</code>", &P4CGI::ul_list("<b>Filename</b> -- see the complete file history", "<b>Revision Number</b> -- see the file text", "<b>Action</b> -- see the deltas (diffs)", "<b>Change</b> -- see the complete change description, including other files")), &P4CGI::start_table("cellpadding=1"), &P4CGI::table_row("-type","th", "-align","left", "File","Rev","Action","Change"); if(scalar(@matches) == 0) { print "<font color=red>No files found matching $filespec</font>\n" ; } else { print "<font color=green>",scalar(@matches)," matching files found:</font>" ; my $f ; foreach $f (@matches) { $f =~ /([^\#]+)\#(\d+) - (\w+) change (\d+)/ ; my ($name,$rev,$act,$change)=($1,$2,$3,$4) ; print "", &P4CGI::table_row(&P4CGI::ahref("-url",P4CGI::FLV_URL(), "FSPC=$name", $name), &P4CGI::ahref("-url",P4CGI::FV_URL(), "FSPC=$name", "REV=$rev", $rev), &P4CGI::ahref("-url",P4CGI::FDV_URL(), "FSPC=$name", "REV=$rev", "ACT=$act", $act), &P4CGI::ahref("-url",P4CGI::CHV_URL(), "CH=$change", $change)) ; } ; print "",&P4CGI::end_table() ; my @files ; foreach $f (@matches) { $f =~ /([^\#]+)\#(\d+) - (\w+) change (\d+)/ ; my ($name,$rev,$act,$change)=($1,$2,$3,$4) ; if($act ne "delete"){ push @files,"$name\#$rev"; } } ; if(@files > 1) { print &P4CGI::cgi()->startform("-action",&P4CGI::FDV_URL(), "-method","GET"), &P4CGI::cgi()->hidden("-name","ACT", "-value","edit"), "View diff between:<br>", &P4CGI::cgi()->popup_menu("-name","FSPC", "-values",\@files), "and<br>", &P4CGI::cgi()->popup_menu("-name","FSPC2", "-values",\@files), &P4CGI::cgi()->submit("-name","ignore", "-value"=>"Go"), &P4CGI::cgi()->endform() ; } ; } ; print "", &P4CGI::end_page() ; # # That's it folks #
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 2778 | Jay Han | creating guest branch per tutorial http://public.perforce.com/public/tutorial.html | ||
//guest/perforce_software/utils/p4db/P4DB_0/sff.cgi | |||||
#1 | 1885 | rmg |
For posterity: Make the old version appear in a "P4DB_0" subdirectory. (I'd have called it 0.99, but I'm not sure it really *is* 0.99!) |
||
//guest/perforce_software/utils/p4db/sff.cgi | |||||
#2 | 12 | Perforce maintenance |
P4DB now browses all depot root paths, not just "//depot/...". (Note: This breaks the "Browse depot tree" function on the main form -- will fix later.) |
||
#1 | 11 | Perforce maintenance | Add Fredric Fredricson's depot browser, P4DB. |