#!/usr/bin/perl -w # -*- perl -*- use P4CGI ; use strict ; # ################################################################# # CONFIGURATION INFORMATION # All config info should be in P4CGI.pm # ################################################################# # # View a branch # ################################################################# ### ### Get branch name ### my $branch = P4CGI::cgi()->param("BRANCH") ; &P4CGI::bail("No branch specified") unless defined $branch ; ### ### Get info about branch ### my %values ; my @fields = &P4CGI::p4readform("branch -o $branch",\%values) ; # Get real user names... my %userCvt ; { my @users ; &P4CGI::p4call(\@users, "users" ); %userCvt = map { /^(\S+).*> \((.+)\) .*$/ ; ($1,$2) ; } @users ; } # Fix owner field if (exists $values{"Owner"}) { 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 description field if(exists $values{"Description"}) { my $d = $values{"Description"} ; $values{"Description"} = "<pre>$d</pre>" ; } # Fix up view info my $viewFrom =""; my $viewTo =""; my $allfrom =""; my $allto =""; foreach (split("\n",$values{"View"})) { /^\s*\/\/(.+)\s+\/\/(.+)/ ; my ($from,$to) = ($1,$2) ; $allfrom .= "//$from" ; $allto .= "+//$to" ; my @from = split /\//,$from ; my @to = split /\//,$to ; my $common = "//" ; while(@from != 0 and @to != 0 and ($from[0] eq $to[0])) { $common .= shift @from ; $common .= "/" ; shift @to ; } $from = $common . "<FONT COLOR=red>" . join("/",@from) . "</FONT>" ; $to = $common . "<FONT COLOR=red>" . join("/",@to) . "</FONT>" ; if (length($viewFrom) > 0) { $viewFrom .= "<br>" ; $viewTo .= "<br>" ; } $viewFrom .= "<tt>$from </tt>" ; $viewTo .= "<tt>$to</tt>" ; } ; $allto =~ s/^\+// ; $values{"View"} = join("\n",(&P4CGI::start_table("cellspacing=0 cellpadding=0"), &P4CGI::table_row($viewFrom,$viewTo), &P4CGI::end_table())) ; my $allToURL = &P4CGI::ahref(-url => "changeList.cgi", "FSPC=$allto", "List changes in branch") ; my $recentlyChanged = &P4CGI::ahref(-url => "filesChangedSince.cgi", "FSPC=$allto", "List recently changed files in branch") ; my $listByUser = &P4CGI::ahref(-url => "changeByUsers.cgi", "FSPC=$allto", "List changes in branch for selected user") ; my $depotStats = &P4CGI::ahref(-url => "depotStats.cgi", "FSPC=$allto", "View depot statistics for branch") ; my $allFromURL = &P4CGI::ahref(-url => "changeList.cgi", "FSPC=$allfrom", "View changes in branch source") ; my $searchDesc = &P4CGI::ahref(-url => "searchPattern.cgi", "FSPC=$allto", "Search for pattern in change descriptions") ; my $openFiles = &P4CGI::ahref(-url => "fileOpen.cgi", "FSPC=$allto", "List open files in branch") ; ### ### Print html ### print "", &P4CGI::start_page("Branch $branch", &P4CGI::ul_list("<b>owner</b> -- view user info", $allFromURL)) ; print &P4CGI::start_table("") ; my $f ; foreach $f (@fields) { print &P4CGI::table_row({-align => "right", -valign => "top", -type => "th", -text => "$f"}, $values{$f}) ; } ; print &P4CGI::end_table(), "<hr>"; my @labels ; &P4CGI::p4call(*P4, "labels" ); while(<P4>) { chomp ; /^Label\s+(\S+)\s/ and do { push @labels,$1 ; } ; } close P4 ; my $chnotinlabel= join("\n",(&P4CGI::cgi()->startform(-action => "changeList.cgi", -method => "GET"), &P4CGI::cgi()->hidden(-name=>"FSPC", -value=>"$allto"), "View changes not in label:<font size=+0>", &P4CGI::cgi()->popup_menu(-name => "EXLABEL", -value => \@labels), &P4CGI::cgi()->submit(-name => "Go", -value => "Go"), "</font>", &P4CGI::cgi()->endform())) ; print "<font size=+1>" , &P4CGI::ul_list($allToURL, $chnotinlabel, $listByUser, $recentlyChanged, $openFiles, $searchDesc, $depotStats) , "</font>" ; print &P4CGI::end_page() ; # # That's all folks #