#!/usr/bonsaitools/bin/perl -- # -*- Mode: perl; indent-tabs-mode: nil -*- # # The contents of this file are subject to the Netscape Public License # Version 1.0 (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. # # Multi file diff cgi # require 'utils.pl'; $|=1; loadConfigData(); print "Content-type: text/html

";

@revs = ();

#if( $ENV{"QUERY_STRING"} eq "" ){
#    $ENV{"QUERY_STRING"}="brendan%2Cns%2Fjs%2Fsrc%2Cjsapi.c%2C-1=on&brendan%2Cns%2Fjs%2Fsrc%2Cjsapi.h%2C-1=on&brendan%2Cns%2Fjs%2Fsrc%2Cjsarray.c%2C-106=on&brendan%2Cns%2Fjs%2Fsrc%2Cjsarray.h%2C-0=on&brendan%2Cns%2Fjs%2Fsrc%2Cjsatom.c%2C-9=on";
#}

&split_cgi_args;

#while( ($k,$v) = each(%ENV) ){
#    print "$k='$v'\n";
#}

if( $form{"cvsroot"} ne "" ){
    $cvsroot = $form{"cvsroot"};
}
else {
    $cvsroot = pickDefaultRepository();
}

if( $form{"allchanges"} ne "" ){
    @revs = split(/,/, $form{"allchanges"} );
}
else {
    while( ($k, $v) = each( %form ) ){
        push( @revs, $k );
    }
}

$didone = 0;
for $k (@revs) {
    ($who,$dir,$file,$rev) = split(/\|/, $k );
    if ($rev eq "") {
        next;
    }
    $prevrev = &PrevRev($rev);
    
    # this doesn't handle files in the attic
    $fullname = "$cvsroot/$dir/$file,v";
    if (IsHidden($fullname)) {
        next;
    }
    open( DIFF, "$rcsdiffcommand -c -r$prevrev -r$rev $fullname 2>&1|" );
    while(){
        $_ =~ s/&/&/g;
        $_ =~ s//>/g;
        print "$who:  $_";
    }
    $didone = 1;
}

if ($didone == 0) {
    print "No changes were selected.  Please press Back and try again.\n";
}



sub split_cgi_args {
    local($i,$var,$value, $s);

    if( $ENV{"REQUEST_METHOD"} eq 'POST'){
        while(<> ){
            $s .= $_;
        }
    }
    else {
        $s = $ENV{"QUERY_STRING"};
    }

    @args= split(/\&/, $s );

    for $i (@args) {
        ($var, $value) = split(/=/, $i);
        $var =~ tr/+/ /;
        $var =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $form{$var} = $value;
    }
}

sub PrevRev {
    local( $rev ) = @_;
    local( $i, $j, $ret, @r );

    @r = split( /\./, $rev );

    $i = @r-1;
    
    $r[$i]--;
    if( $r[$i] == 0 ){
        $i -= 2;
    }

    $j = 0;
    while( $j < $i ){
        $ret .= "$r[$j]\.";
        $j++
    }
    $ret .= $r[$i];
}