Annotation of loncom/build/verify.pl, revision 1.2
1.1 harris41 1: #!/usr/bin/perl
2:
1.2 ! harris41 3: # The LearningOnline Network with CAPA
! 4: # verify.pl - Wraps around filecompare.pl for posteval lpml statements.
! 5: #
! 6: # $Id$
! 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:
1.1 harris41 35: use strict;
36:
37: my $mode=shift @ARGV;
38:
1.2 ! harris41 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: }
! 71: }
! 72: elsif ($mode eq 'link') {
! 73: my $linkto=shift @ARGV;
! 74: my $location=shift @ARGV;
! 75: unless (-l $location) {
! 76: print "[NOT A LINK]\n";
! 77: }
! 78: else {
! 79: my $linkto2=readlink($location);
! 80: if ($linkto ne $linkto2) {
! 81: print "[WRONG LINKTO; points to $linkto2]\n";
! 82: }
! 83: }
! 84: }
! 85: elsif ($mode eq 'directory') {
! 86: my $location=shift @ARGV;
! 87: my $chmod=shift @ARGV;
! 88: my $chown=shift @ARGV;
! 89: my ($user,$group)=split(/\:/,$chown);
! 90: if (-d $location) {
! 91: my $verify=`perl verifymodown.pl $location '-m $chmod -o $user -g $group -N'`;
! 92: print "$verify\n" if $verify;
! 93: }
! 94: else {
! 95: print "[MISSING]\n";
! 96: }
! 97: }
! 98: elsif ($mode eq 'fileglob') {
1.1 harris41 99: my $sourceroot=shift @ARGV;
100: my $targetroot=shift @ARGV;
101: my $glob=shift @ARGV;
102: my $sourcedir=shift @ARGV;
103: my $filenames=shift @ARGV;
104: my $targetdir=shift @ARGV;
105: my $chmod=shift @ARGV;
106: my $chown=shift @ARGV;
107: # does sourcedir&glob have extraneous files not given in filenames?
108: # does targetdir lack files in filenames
109: # are any of the files of incorrect permissions or ownership?
1.2 ! harris41 110: # are there differences between any of the files
! 111: my %files=map {($_,1)} (split(';',$filenames));
! 112: my $command="perl filecompare.pl -s SOURCE='$sourceroot' ".
! 113: "TARGET='/$targetroot' ".
! 114: "MODE=fileglob $sourcedir$glob $targetdir$glob 2>/dev/null";
! 115: my @ret=`$command`;
! 116: foreach my $r (@ret) {
! 117: chomp $r;
! 118: my ($name, $existence, $cvstime, $age, $md5sum, $size, $lines, $diffs)=
! 119: split(/\t/,$r);
! 120:
! 121: if ($existence eq 'existence: yes:yes') {
! 122: my ($user,$group)=split(/\:/,$chown);
! 123: my $verify=`perl verifymodown.pl /$targetdir$name '-m $chmod -o $user -g $group -N'`;
! 124: if ($verify) {
! 125: print "[$name $verify]\n";
! 126: }
! 127: }
! 128: if (!$files{$name}) {
! 129: print "[$name is undefined/unexpected in fileglob]\n";
! 130: }
! 131: elsif ($existence eq 'existence: yes:yes' and
! 132: $md5sum eq 'md5sum: different') {
! 133: print "[$name is different]\n";
! 134: }
! 135: elsif ($existence eq 'existence: yes:no') {
! 136: print "[$name does not exist at target]\n";
! 137: }
! 138: $files{$name}=2;
! 139: }
! 140: for my $f (keys %files) {
! 141: if ($files{$f}!=2) {
! 142: print "[$f does not exist at source]\n";
! 143: }
! 144: }
! 145: }
! 146: else {
! 147: print "[UNPROCESSED ".join(' ',@ARGV)."]\n";
1.1 harris41 148: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>