#!/usr/bin/perl -w
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bonsai CVS tool.
#
# The Initial Developer of the Original Code is Netscape Communications
# Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
use strict;
require 'CGI.pl';
use vars qw(@TreeList);
print "Content-type: text/html\n\n";
Lock();
LoadCheckins();
LoadTreeConfig();
Unlock();
my %peoplearray = ();
my @list = ();
my $versioninfo = '';
my $tweak = $::FORM{'tweak'};
my $delta_size = 1;
my ($title, $head, $subhead) = ('', '', '');
my ($checkin, $info);
sub BreakBig {
my ($str) = @_;
my $result = '';
while (length($str) > 20) {
my $head = substr($str, 0, 19);
my $w = rindex($head, "/");
$w = 19 if ($w < 0);
$result .= substr($str, 0, $w++) . "
";
$str = substr($str, $w);
}
return $result . $str;
}
my $person = &SanitizeUsernames($::FORM{'person'});
if ($person) {
my $escaped_person = &html_quote($person);
$title = $head = "Checkins for $escaped_person";
foreach $checkin (@::CheckInList) {
$info = eval("\\\%$checkin");
push @list, $checkin
if ($$info{'person'} eq $person);
}
} elsif (exists($::FORM{'mindate'}) || exists($::FORM{'maxdate'})) {
my ($min, $max) = (0, 1<<30);
$title = "Checkins";
if (exists($::FORM{'mindate'})) {
$title .= " since " .
&MyFmtClock($min = &ExpectDate($::FORM{'mindate}'}));
$title .= " and" if (exists($::FORM{'maxdate'}));
}
$title .= " before" . &MyFmtClock($max = &ExpectDate($::FORM{'maxdate'}))
if (exists($::FORM{'maxdate'}));
$head = $title;
foreach $checkin (@::CheckInList) {
$info = eval("\\\%$checkin");
push @list, $checkin
if (($$info{'date'} >= $min) && ($$info{'date'} <= $max));
}
} else {
$title = $head = "All Checkins";
@list = @::CheckInList;
}
my $treepart = '';
$treepart = "&treeid=$::TreeID" if ($::TreeID ne "default");
my $branchpart = '';
$branchpart = "&branch=$::TreeInfo{$::TreeID}{branch}"
if ($::TreeInfo{$::TreeID}{branch});
$subhead .= "
These checkins are not from the current
hook!
"
if (Param('readonly'));
$subhead .= "View a different
day's checkins.
";
PutsHeader($title, $head, $subhead);
my $sort = $::FORM{'sort'} || "";
if (!$sort) {
$sort = 'date';
} else {
die ("Invalid sort string.\n") unless ($sort =~ m/^\w+(,\w+)*$/);
}
print "
(Current sort is by $sort; click on a column header
to sort by that column.)";
my @fields = split(/,/, $sort);
sub Compare {
my $rval = 0;
my $key;
my $aref = eval("\\\%$a");
my $bref = eval("\\\%$b");
foreach $key (@fields) {
if ($key eq 'date') {
$rval = $$bref{$key} cmp $$aref{$key};
} else {
$rval = $$aref{$key} cmp $$bref{$key};
}
return $rval unless ($rval == 0);
}
return $rval;
}
my $total_added = 0;
my $total_removed = 0;
#
# Calculate delta information
#
CHECKIN:
foreach my $infoname (@list) {
$info = eval("\\\%$infoname");
$$info{added} = 0;
$$info{removed} = 0;
if (exists($$info{'fullinfo'})) {
my @fullinfos = split(/!NeXt!/, $$info{'fullinfo'});
INFO:
foreach my $fullinfo (@fullinfos) {
my ($file, $version, $addlines, $removelines, $sticky)
= split(/\|/, $fullinfo);
# Skip binary files
next INFO if (($file =~ /\.gif$/) ||
($file =~ /\.bmp$/) ||
($sticky =~ /-kb/));
if ($addlines) {
$$info{added} += $addlines;
}
if ($removelines) {
$$info{removed} += $removelines;
}
}
}
$$info{'lines_changed'} =
sprintf("%7d", 1000000 - ($$info{added} - $$info{removed}));
$total_added += $$info{added};
$total_removed += $$info{removed};
}
# Sort that puppy...
@list = sort Compare @list;
# $::buffer contains the arguments that we were called with, it is
# initialized by CGI.pl
my $otherparams;
($otherparams = $::buffer) =~ s/[&?]sort=[^&]*//g;
sub NewSort {
my ($key) = @_;
my @sort_keys = grep(!/^$key$/, split(/,/, $sort));
unshift(@sort_keys, $key);
return $otherparams . "&sort=" . join(',', @sort_keys);
}
#
# Print the table...
#
print "