Annotation of nsdl/build/verify.pl, revision 1.1
1.1 ! harris41 1: #!/usr/bin/perl
! 2:
! 3: # The LearningOnline Network with CAPA
! 4: # verify.pl - Wraps around filecompare.pl for posteval lpml statements.
! 5: #
! 6: # $Id: verify.pl,v 1.3 2001/12/07 04:44:11 harris41 Exp $
! 7: #
! 8: # Copyright Michigan State University Board of Trustees
! 9: #
! 10: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
! 11: #
! 12: # LON-CAPA is free software; you can redistribute it and/or modify
! 13: # it under the terms of the GNU General Public License as published by
! 14: # the Free Software Foundation; either version 2 of the License, or
! 15: # (at your option) any later version.
! 16: #
! 17: # LON-CAPA is distributed in the hope that it will be useful,
! 18: # but WITHOUT ANY WARRANTY; without even the implied warranty of
! 19: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 20: # GNU General Public License for more details.
! 21: #
! 22: # You should have received a copy of the GNU General Public License
! 23: # along with LON-CAPA; if not, write to the Free Software
! 24: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! 25: #
! 26: # /home/httpd/html/adm/gpl.txt
! 27: #
! 28: # http://www.lon-capa.org/
! 29: #
! 30: # YEAR=2001
! 31: # 12/5,12/6 Scott Harrison
! 32: #
! 33: ###
! 34:
! 35: use strict;
! 36:
! 37: my $mode=shift @ARGV;
! 38:
! 39: if ($mode eq 'file') {
! 40: my $sourceroot=shift @ARGV;
! 41: my $targetroot=shift @ARGV;
! 42: my $source=shift @ARGV;
! 43: my $target=shift @ARGV;
! 44: my $chmod=shift @ARGV;
! 45: my $chown=shift @ARGV;
! 46: my $command="perl filecompare.pl -s SOURCE='$sourceroot' ".
! 47: "TARGET='/$targetroot' ".
! 48: "MODE=file $source $target 2>/dev/null";
! 49:
! 50: my @ret=`$command`;
! 51: foreach my $r (@ret) {
! 52: chomp $r;
! 53: my ($name, $existence, $cvstime, $age, $md5sum, $size, $lines, $diffs)=
! 54: split(/\t/,$r);
! 55:
! 56: if ($existence eq 'existence: yes:yes') {
! 57: my ($user,$group)=split(/\:/,$chown);
! 58: my $verify=`perl verifymodown.pl /$targetroot$target '-m $chmod -o $user -g $group -N'`;
! 59: if ($verify) {
! 60: print "$verify\n";
! 61: }
! 62: }
! 63: if ($existence eq 'existence: yes:yes' and
! 64: $md5sum eq 'md5sum: different') {
! 65: print "[DIFFERING CONTENTS]\n";
! 66: }
! 67: elsif ($existence eq 'existence: yes:no') {
! 68: print "[DOES NOT EXIST AT TARGET]\n";
! 69: }
! 70: elsif ($existence=~/^existence: no/) {
! 71: print "[DOES NOT EXIST AT SOURCE]\n";
! 72: if ($existence eq 'existence: no:no') {
! 73: print "[DOES NOT EXIST AT TARGET]\n";
! 74: }
! 75: }
! 76: }
! 77: }
! 78: elsif ($mode eq 'link') {
! 79: my $linkto=shift @ARGV;
! 80: my $location=shift @ARGV;
! 81: unless (-l $location) {
! 82: print "[NOT A LINK]\n";
! 83: }
! 84: else {
! 85: my $linkto2=readlink($location);
! 86: if ($linkto ne $linkto2) {
! 87: print "[WRONG LINKTO; points to $linkto2]\n";
! 88: }
! 89: }
! 90: }
! 91: elsif ($mode eq 'directory') {
! 92: my $location=shift @ARGV;
! 93: my $chmod=shift @ARGV;
! 94: my $chown=shift @ARGV;
! 95: my ($user,$group)=split(/\:/,$chown);
! 96: if (-d $location) {
! 97: my $verify=`perl verifymodown.pl $location '-m $chmod -o $user -g $group -N'`;
! 98: print "$verify\n" if $verify;
! 99: }
! 100: else {
! 101: print "[MISSING]\n";
! 102: }
! 103: }
! 104: elsif ($mode eq 'fileglob') {
! 105: my $sourceroot=shift @ARGV;
! 106: my $targetroot=shift @ARGV;
! 107: my $glob=shift @ARGV;
! 108: my $sourcedir=shift @ARGV;
! 109: my $filenames=shift @ARGV;
! 110: my $targetdir=shift @ARGV;
! 111: my $chmod=shift @ARGV;
! 112: my $chown=shift @ARGV;
! 113: # does sourcedir&glob have extraneous files not given in filenames?
! 114: # does targetdir lack files in filenames
! 115: # are any of the files of incorrect permissions or ownership?
! 116: # are there differences between any of the files
! 117: my %files=map {($_,1)} (split(';',$filenames));
! 118: my $command="perl filecompare.pl -s SOURCE='$sourceroot' ".
! 119: "TARGET='/$targetroot' ".
! 120: "MODE=fileglob $sourcedir$glob $targetdir$glob 2>/dev/null";
! 121: my @ret=`$command`;
! 122: foreach my $r (@ret) {
! 123: chomp $r;
! 124: my ($name, $existence, $cvstime, $age, $md5sum, $size, $lines, $diffs)=
! 125: split(/\t/,$r);
! 126:
! 127: if ($existence eq 'existence: yes:yes') {
! 128: my ($user,$group)=split(/\:/,$chown);
! 129: my $verify=`perl verifymodown.pl /$targetdir$name '-m $chmod -o $user -g $group -N'`;
! 130: if ($verify) {
! 131: print "[$name $verify]\n";
! 132: }
! 133: }
! 134: if (!$files{$name}) {
! 135: print "[$name is undefined/unexpected in fileglob]\n";
! 136: }
! 137: elsif ($existence eq 'existence: yes:yes' and
! 138: $md5sum eq 'md5sum: different') {
! 139: print "[$name is different]\n";
! 140: }
! 141: elsif ($existence eq 'existence: yes:no') {
! 142: print "[$name does not exist at target]\n";
! 143: }
! 144: $files{$name}=2;
! 145: }
! 146: for my $f (keys %files) {
! 147: if ($files{$f}!=2) {
! 148: print "[$f does not exist at source]\n";
! 149: }
! 150: }
! 151: }
! 152: else {
! 153: print "[UNPROCESSED ".join(' ',@ARGV)."]\n";
! 154: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>