version 1.1, 2001/12/06 00:24:01
|
version 1.2, 2001/12/06 23:13:47
|
Line 1
|
Line 1
|
#!/usr/bin/perl |
#!/usr/bin/perl |
|
|
|
# The LearningOnline Network with CAPA |
|
# verify.pl - Wraps around filecompare.pl for posteval lpml statements. |
|
# |
|
# $Id$ |
|
# |
|
# Copyright Michigan State University Board of Trustees |
|
# |
|
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
|
# |
|
# LON-CAPA is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; either version 2 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# LON-CAPA is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with LON-CAPA; if not, write to the Free Software |
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
# |
|
# /home/httpd/html/adm/gpl.txt |
|
# |
|
# http://www.lon-capa.org/ |
|
# |
|
# YEAR=2001 |
|
# 12/5,12/6 Scott Harrison |
|
# |
|
### |
|
|
use strict; |
use strict; |
|
|
my $mode=shift @ARGV; |
my $mode=shift @ARGV; |
|
|
if ($mode eq 'fileglob') { |
if ($mode eq 'file') { |
|
my $sourceroot=shift @ARGV; |
|
my $targetroot=shift @ARGV; |
|
my $source=shift @ARGV; |
|
my $target=shift @ARGV; |
|
my $chmod=shift @ARGV; |
|
my $chown=shift @ARGV; |
|
my $command="perl filecompare.pl -s SOURCE='$sourceroot' ". |
|
"TARGET='/$targetroot' ". |
|
"MODE=file $source $target 2>/dev/null"; |
|
|
|
my @ret=`$command`; |
|
foreach my $r (@ret) { |
|
chomp $r; |
|
my ($name, $existence, $cvstime, $age, $md5sum, $size, $lines, $diffs)= |
|
split(/\t/,$r); |
|
|
|
if ($existence eq 'existence: yes:yes') { |
|
my ($user,$group)=split(/\:/,$chown); |
|
my $verify=`perl verifymodown.pl /$targetroot$target '-m $chmod -o $user -g $group -N'`; |
|
if ($verify) { |
|
print "$verify\n"; |
|
} |
|
} |
|
if ($existence eq 'existence: yes:yes' and |
|
$md5sum eq 'md5sum: different') { |
|
print "[DIFFERING CONTENTS]\n"; |
|
} |
|
elsif ($existence eq 'existence: yes:no') { |
|
print "[DOES NOT EXIST AT TARGET]\n"; |
|
} |
|
} |
|
} |
|
elsif ($mode eq 'link') { |
|
my $linkto=shift @ARGV; |
|
my $location=shift @ARGV; |
|
unless (-l $location) { |
|
print "[NOT A LINK]\n"; |
|
} |
|
else { |
|
my $linkto2=readlink($location); |
|
if ($linkto ne $linkto2) { |
|
print "[WRONG LINKTO; points to $linkto2]\n"; |
|
} |
|
} |
|
} |
|
elsif ($mode eq 'directory') { |
|
my $location=shift @ARGV; |
|
my $chmod=shift @ARGV; |
|
my $chown=shift @ARGV; |
|
my ($user,$group)=split(/\:/,$chown); |
|
if (-d $location) { |
|
my $verify=`perl verifymodown.pl $location '-m $chmod -o $user -g $group -N'`; |
|
print "$verify\n" if $verify; |
|
} |
|
else { |
|
print "[MISSING]\n"; |
|
} |
|
} |
|
elsif ($mode eq 'fileglob') { |
my $sourceroot=shift @ARGV; |
my $sourceroot=shift @ARGV; |
my $targetroot=shift @ARGV; |
my $targetroot=shift @ARGV; |
my $glob=shift @ARGV; |
my $glob=shift @ARGV; |
Line 13 if ($mode eq 'fileglob') {
|
Line 104 if ($mode eq 'fileglob') {
|
my $targetdir=shift @ARGV; |
my $targetdir=shift @ARGV; |
my $chmod=shift @ARGV; |
my $chmod=shift @ARGV; |
my $chown=shift @ARGV; |
my $chown=shift @ARGV; |
print "sourceroot: $sourceroot\n"; |
|
print "targetroot: $targetroot\n"; |
|
print "glob: $glob\n"; |
|
print "filenames: $filenames\n"; |
|
print "sourcedir: $sourcedir\n"; |
|
print "targetdir: $targetdir\n"; |
|
print "chmod: $chmod\n"; |
|
print "chown: $chown\n"; |
|
# does sourcedir&glob have extraneous files not given in filenames? |
# does sourcedir&glob have extraneous files not given in filenames? |
# does targetdir lack files in filenames |
# does targetdir lack files in filenames |
# are any of the files of incorrect permissions or ownership? |
# are any of the files of incorrect permissions or ownership? |
print "perl filecompare.pl -s SOURCE='$sourceroot' ". |
# are there differences between any of the files |
"TARGET='/$targetroot' ". |
my %files=map {($_,1)} (split(';',$filenames)); |
"MODE=fileglob $sourcedir$glob $targetdir$glob\n"; |
my $command="perl filecompare.pl -s SOURCE='$sourceroot' ". |
|
"TARGET='/$targetroot' ". |
|
"MODE=fileglob $sourcedir$glob $targetdir$glob 2>/dev/null"; |
|
my @ret=`$command`; |
|
foreach my $r (@ret) { |
|
chomp $r; |
|
my ($name, $existence, $cvstime, $age, $md5sum, $size, $lines, $diffs)= |
|
split(/\t/,$r); |
|
|
|
if ($existence eq 'existence: yes:yes') { |
|
my ($user,$group)=split(/\:/,$chown); |
|
my $verify=`perl verifymodown.pl /$targetdir$name '-m $chmod -o $user -g $group -N'`; |
|
if ($verify) { |
|
print "[$name $verify]\n"; |
|
} |
|
} |
|
if (!$files{$name}) { |
|
print "[$name is undefined/unexpected in fileglob]\n"; |
|
} |
|
elsif ($existence eq 'existence: yes:yes' and |
|
$md5sum eq 'md5sum: different') { |
|
print "[$name is different]\n"; |
|
} |
|
elsif ($existence eq 'existence: yes:no') { |
|
print "[$name does not exist at target]\n"; |
|
} |
|
$files{$name}=2; |
|
} |
|
for my $f (keys %files) { |
|
if ($files{$f}!=2) { |
|
print "[$f does not exist at source]\n"; |
|
} |
|
} |
|
} |
|
else { |
|
print "[UNPROCESSED ".join(' ',@ARGV)."]\n"; |
} |
} |