#!/usr/bin/perl -w # -*- perl -*- use P4CGI ; use strict ; # ################################################################# # CONFIGURATION INFORMATION # All config info should be in P4CGI.pm # ################################################################# # # View labels # ################################################################# # Get label my $label = P4CGI::cgi()->param("LABEL") ; &P4CGI::bail("No label specified") unless defined $label ; my $found ; # Get list of all labels and also check that supplied label exists my @labels ; &P4CGI::p4call(\@labels, "labels" ); foreach (@labels) { $_ =~ s/^Label (\S+).*$/$1/ ; if($_ eq $label) { $found = "Yes" ; } ; } # Print header print "", &P4CGI::start_page("Label $label", &P4CGI::ul_list("<b>owner</b> -- view user info", "<b>view</b> -- View changes for view")) ; &P4CGI::signalError("Label $label not in depot") unless $found ; my @otherLabels ; foreach (@labels) { next if ($_ eq $label) ; push @otherLabels,$_ ; } ; ### ### "Sort" otherlabels after "closeness" ### { my $lab=uc($label) ; my $len = length($lab) ; my @labs ; while($len > 3) { my @tmp ; my $l ; $len-- ; $lab = substr($lab,0,$len) ; foreach $l (@otherLabels) { if(uc(substr($l,0,$len)) eq $lab) { push @labs,$l ; } else { push @tmp,$l ; } } @otherLabels = @tmp ; } ; @otherLabels = (@labs,@otherLabels) ; } # Get label info print "", &P4CGI::start_table("") ; my %values ; my @fields = &P4CGI::p4readform("label -o \"$label\"",\%values) ; # Fix description field if(exists $values{"Description"}) { my $d = $values{"Description"} ; $values{"Description"} = "<pre>$d</pre>" ; } # Fix owner field if (exists $values{"Owner"}) { # Get real user names... my %userCvt ; { my @users ; &P4CGI::p4call(\@users, "users" ); %userCvt = map { /^(\S+).*> \((.+)\) .*$/ ; ($1,$2) ; } @users ; } my $u = $values{"Owner"} ; if(exists $userCvt{$u}) { $values{"Owner"} = &P4CGI::ahref(-url=>"userView.cgi", "USER=$u", "$u") . " (" . $userCvt{$u} . ")" ; } else { $values{"Owner"} = "$u (Unknown user)" ; } } # Fix view field my $viewFSPC = $values{"View"} ; my $view ; foreach (split("\n",$values{"View"})) { my $t = &P4CGI::ahref(-url => "depotTreeBrowser.cgi", "FSPC=$_", "<tt>$_</tt>") ; if (defined $view) { $view .= "<br>$t" ; } else { $view .= "$t" ; } ; } ; $values{"View"} = $view ; print &P4CGI::start_table("") ; my $f ; foreach $f (@fields) { print &P4CGI::table_row({-align => "right", -valign => "top", -type => "th", -text => "$f"}, $values{$f}) ; } ; $viewFSPC =~ s/\n//ig ; print &P4CGI::table_row(undef, &P4CGI::ul_list(&P4CGI::ahref(-url => "changeList.cgi", "FSPC=$viewFSPC", "EXLABEL=$label", "List changes in label view not included in label"), &P4CGI::ahref(-url => "changeList.cgi", "LABEL=$label", "View changes for label $label"), &P4CGI::ahref(-url => "fileSearch.cgi", "LABEL=$label", "List files in label $label"))) ; print &P4CGI::end_table() ; print "<hr>", &P4CGI::cgi()->startform(-action => "labelDiffView.cgi" , -method => "GET"), &P4CGI::cgi()->hidden(-name=>"LABEL1", -value=>"$label"), "Diff with label: ", &P4CGI::cgi()->popup_menu(-name => "LABEL2", -value => \@otherLabels), "<br>Show files that: ", &P4CGI::cgi()->checkbox(-name => "SHOWSAME", -value => "Y", -label => " are not modified"), &P4CGI::cgi()->checkbox(-name => "SHOWNOTSAME", -checked => "Y", -value => "Y", -label => " are modified"), &P4CGI::cgi()->checkbox(-name => "SHOWDIFF", -checked => "Y", -value => "Y", -label => " differ"), &P4CGI::cgi()->submit(-name => "Go", -value => "Go"), &P4CGI::cgi()->endform() ; print "<hr>", &P4CGI::cgi()->startform(-action => "changeList.cgi", -method => "GET"), &P4CGI::cgi()->hidden(-name=>"LABEL", -value=>"$label"), "View changes for label $label excluding label: ", &P4CGI::cgi()->popup_menu(-name => "EXLABEL", -value => \@otherLabels), &P4CGI::cgi()->submit(-name => "Go", -value => "Go"), &P4CGI::cgi()->endform() ; print "<hr>", &P4CGI::cgi()->startform(-action => "fileSearch.cgi", -method => "GET"), &P4CGI::cgi()->hidden(-name=>"LABEL", -value=>"$label"), &P4CGI::cgi()->submit(-name => "ignore", -value => "Search in label for:"), &P4CGI::cgi()->textfield(-name => "FSPC", -default => "//...", -size => 50, -maxlength => 256), &P4CGI::cgi()->endform() ; print "", &P4CGI::end_page() ; # # That's all folks #