version 1.10, 2001/12/06 23:14:33
|
version 1.15, 2014/06/09 05:14:12
|
Line 72 Options (before file/dir names):
|
Line 72 Options (before file/dir names):
|
-a show all files (with comparisons) |
-a show all files (with comparisons) |
-q only show file names (based on first file/dir) |
-q only show file names (based on first file/dir) |
-v verbose mode (default) |
-v verbose mode (default) |
-bN buildmode (controls exit code of this script; 0 unless...) |
-bN buildmode (controls EXIT code of this script; 0 unless...) |
N=1: md5sum=same --> 1; cvstime<0 --> 2 |
N=1: md5sum=same --> 1; cvstime<0 --> 2 |
N=2: same as N=1 except without md5sum |
N=2: same as N=1 except without md5sum |
N=3: md5sum=same --> 1; age<0 --> 2 |
N=3: md5sum=same --> 1; age<0 --> 2 |
N=4: cvstime>0 --> 2 |
N=4: cvstime>0 --> 2 |
|
N=5: md5sum=same --> 1; cvstime<0 and sha1sum from dns_checksums=different --> 2; |
|
N=6: md5sum=same --> 1; age<0 and sha1sum from dns_checksums=different --> 2; |
|
|
The third way to pass arguments is set by the -s flag. |
The third way to pass arguments is set by the -s flag. |
filecompare.pl -s SOURCE=[source] TARGET=[target] MODE=[mode] LOC1 LOC2 |
filecompare.pl -s SOURCE=[source] TARGET=[target] MODE=[mode] LOC1 LOC2 |
Line 103 unless (@ARGV) {
|
Line 105 unless (@ARGV) {
|
# size similarity (bytes) |
# size similarity (bytes) |
# line count difference |
# line count difference |
# number of different lines |
# number of different lines |
|
# sha1sum similarity to checksum for same file in installed version |
# |
# |
# Quantities of comparison: |
# Quantities of comparison: |
# existence (no,yes); other values become 'n/a' |
# existence (no,yes); other values become 'n/a' |
Line 112 unless (@ARGV) {
|
Line 115 unless (@ARGV) {
|
# size similarity (byte difference) |
# size similarity (byte difference) |
# line count difference (integer) |
# line count difference (integer) |
# number of different lines (integer) |
# number of different lines (integer) |
|
# sha1sum ("same" or "different") |
|
|
# ---------------------------------------------------------------- Dependencies |
# ---------------------------------------------------------------- Dependencies |
# implementing from unix command line (assuming bash) |
# implementing from unix command line (assuming bash) |
# md5sum, diff, wc -l |
# md5sum, diff, wc -l, sha1sum |
|
|
# ---------------------------------------------- Process command line arguments |
# ---------------------------------------------- Process command line arguments |
# Flags (before file/dir names): |
# Flags (before file/dir names): |
Line 240 my %OUTPUT=(
|
Line 244 my %OUTPUT=(
|
'size'=>(sub {print 'size: '.@_[0];return;}), |
'size'=>(sub {print 'size: '.@_[0];return;}), |
'lines'=>(sub {print 'lines: '.@_[0];return;}), |
'lines'=>(sub {print 'lines: '.@_[0];return;}), |
'diffs'=>(sub {print 'diffs: '.@_[0];return;}), |
'diffs'=>(sub {print 'diffs: '.@_[0];return;}), |
|
'sha1sum'=>(sub {print 'sha1sum: '.@_[0];return;}), |
); |
); |
|
|
my %MEASURE=( |
my %MEASURE=( |
Line 269 my %MEASURE=(
|
Line 274 my %MEASURE=(
|
my $rv2=`wc -l $file2`; chop $rv2; |
my $rv2=`wc -l $file2`; chop $rv2; |
return ($rv1,$rv2); } ), |
return ($rv1,$rv2); } ), |
'diffs'=>( sub { my ($file1,$file2)=@_; |
'diffs'=>( sub { my ($file1,$file2)=@_; |
|
return (0,0); |
my $rv1=`diff $file1 $file2 | grep '^<' | wc -l`; |
my $rv1=`diff $file1 $file2 | grep '^<' | wc -l`; |
chop $rv1; $rv1=~s/^\s+//; $rv1=~s/\s+$//; |
chop $rv1; $rv1=~s/^\s+//; $rv1=~s/\s+$//; |
my $rv2=`diff $file1 $file2 | grep '^>' | wc -l`; |
my $rv2=`diff $file1 $file2 | grep '^>' | wc -l`; |
chop $rv2; $rv2=~s/^\s+//; $rv2=~s/\s+$//; |
chop $rv2; $rv2=~s/^\s+//; $rv2=~s/\s+$//; |
return ($rv1,$rv2); } ), |
return ($rv1,$rv2); } ), |
|
'sha1sum'=>( sub { my ($file1,$file2)=@_; |
|
if (open(my $fh,"</etc/loncapa-release.prev")) { |
|
my $loncaparev = <$fh>; |
|
close($fh); |
|
chomp($loncaparev); |
|
$loncaparev =~ s/^\QLON-CAPA release \E//; |
|
$loncaparev =~ s/\-\d{8}$//; |
|
my ($rv1)=split(/ /,`sha1sum $file2`); chomp $rv1; |
|
my $checksum; |
|
if ($loncaparev eq 'CVS_HEAD') { |
|
return ($rv1,$checksum); |
|
} |
|
elsif (open(my $fh,"<../../loncom/dns_checksums/$loncaparev.tab")) { |
|
while (<$fh>) { |
|
chomp(); |
|
if (/^\Q$file2\E,[\d\.]+,(\w+)$/) { |
|
$checksum = $1; |
|
last; |
|
} |
|
} |
|
close($fh); |
|
return ($rv1,$checksum); |
|
} |
|
} |
|
return('n/a','n/a'); }), |
); |
); |
|
|
FLOOP: foreach my $file (@files) { |
FLOOP: foreach my $file (@files) { |
Line 289 FLOOP: foreach my $file (@files) {
|
Line 320 FLOOP: foreach my $file (@files) {
|
} |
} |
my ($existence1,$existence2)=&{$MEASURE{'existence'}}($file1,$file2); |
my ($existence1,$existence2)=&{$MEASURE{'existence'}}($file1,$file2); |
my $existence=$existence1.':'.$existence2; |
my $existence=$existence1.':'.$existence2; |
my ($cvstime,$md5sum,$age,$size,$lines,$diffs); |
my ($cvstime,$md5sum,$age,$size,$lines,$diffs,$sha1sum); |
if ($existence1 eq 'no' or $existence2 eq 'no') { |
if ($existence1 eq 'no' or $existence2 eq 'no') { |
$md5sum='n/a'; |
$md5sum='n/a'; |
$age='n/a'; |
$age='n/a'; |
Line 297 FLOOP: foreach my $file (@files) {
|
Line 328 FLOOP: foreach my $file (@files) {
|
$size='n/a'; |
$size='n/a'; |
$lines='n/a'; |
$lines='n/a'; |
$diffs='n/a'; |
$diffs='n/a'; |
|
$sha1sum='n/a'; |
} |
} |
else { |
else { |
if ($buildmode) { |
if ($buildmode) { |
my ($cvstime1,$cvstime2)=&{$MEASURE{'cvstime'}}($file1,$file2); |
my ($cvstime1,$cvstime2)=&{$MEASURE{'cvstime'}}($file1,$file2); |
$cvstime=$cvstime1-$cvstime2; |
$cvstime=$cvstime1-$cvstime2; |
} |
my ($sha1sumfile,$checksum) = &{$MEASURE{'sha1sum'}}($file1,$file2); |
|
$sha1sum='n/a'; |
|
unless ($checksum eq 'n/a') { |
|
if ($sha1sumfile && $checksum) { |
|
if ($sha1sumfile eq $checksum) { |
|
$sha1sum='same'; |
|
} |
|
else { |
|
$sha1sum='different'; |
|
} |
|
} |
|
} |
|
} |
else { |
else { |
$cvstime='n/a'; |
$cvstime='n/a'; |
|
$sha1sum='n/a'; |
} |
} |
my ($age1,$age2)=&{$MEASURE{'age'}}($file1,$file2); |
my ($age1,$age2)=&{$MEASURE{'age'}}($file1,$file2); |
$age=$age1-$age2; |
$age=$age1-$age2; |
Line 423 FLOOP: foreach my $file (@files) {
|
Line 468 FLOOP: foreach my $file (@files) {
|
$showflag=1; |
$showflag=1; |
} |
} |
} |
} |
if ($buildmode==1) { |
if ($buildmode==1) { # -b1 |
if ($md5sum eq 'same') { |
if ($md5sum eq 'same') { |
exit(1); |
exit(1); |
} |
} |
Line 434 FLOOP: foreach my $file (@files) {
|
Line 479 FLOOP: foreach my $file (@files) {
|
exit(0); |
exit(0); |
} |
} |
} |
} |
elsif ($buildmode==2) { |
elsif ($buildmode==2) { # -b2 |
if ($cvstime<0) { |
if ($cvstime<0) { |
exit(2); |
exit(2); |
} |
} |
Line 442 FLOOP: foreach my $file (@files) {
|
Line 487 FLOOP: foreach my $file (@files) {
|
exit(0); |
exit(0); |
} |
} |
} |
} |
elsif ($buildmode==3) { |
elsif ($buildmode==3) { # -b3 |
if ($md5sum eq 'same') { |
if ($md5sum eq 'same') { |
exit(1); |
exit(1); |
} |
} |
Line 453 FLOOP: foreach my $file (@files) {
|
Line 498 FLOOP: foreach my $file (@files) {
|
exit(0); |
exit(0); |
} |
} |
} |
} |
elsif ($buildmode==4) { |
elsif ($buildmode==4) { # -b4 |
if ($existence=~/no$/) { |
if ($existence=~/no$/) { |
exit(3); |
exit(3); |
} |
} |
Line 467 FLOOP: foreach my $file (@files) {
|
Line 512 FLOOP: foreach my $file (@files) {
|
exit(0); |
exit(0); |
} |
} |
} |
} |
|
elsif ($buildmode==5) { # -b5 |
|
if ($md5sum eq 'same') { |
|
exit(1); |
|
} |
|
elsif ($cvstime<0) { |
|
if ($sha1sum eq 'same') { |
|
exit(0); |
|
} |
|
else { |
|
exit(2); |
|
} |
|
} |
|
else { |
|
exit(0); |
|
} |
|
} |
|
elsif ($buildmode==6) { # -b6 |
|
if ($md5sum eq 'same') { |
|
exit(1); |
|
} |
|
elsif ($age<0) { |
|
if ($sha1sum eq 'same') { |
|
exit(0); |
|
} |
|
else { |
|
exit(2); |
|
} |
|
} |
|
else { |
|
exit(0); |
|
} |
|
} |
|
|
if ($showflag) { |
if ($showflag) { |
print "$file"; |
print "$file"; |
if ($verbose==1) { |
if ($verbose==1) { |
Line 478 FLOOP: foreach my $file (@files) {
|
Line 556 FLOOP: foreach my $file (@files) {
|
print &{$OUTPUT{'age'}}($age); |
print &{$OUTPUT{'age'}}($age); |
print "\t"; |
print "\t"; |
print &{$OUTPUT{'md5sum'}}($md5sum); |
print &{$OUTPUT{'md5sum'}}($md5sum); |
|
print "\t"; |
|
print &{$OUTPUT{'sha1sum'}}($sha1sum); |
print "\t"; |
print "\t"; |
print &{$OUTPUT{'size'}}($size); |
print &{$OUTPUT{'size'}}($size); |
print "\t"; |
print "\t"; |
print &{$OUTPUT{'lines'}}($lines); |
print &{$OUTPUT{'lines'}}($lines); |
print "\t"; |
print "\t"; |
print &{$OUTPUT{'diffs'}}($diffs); |
print &{$OUTPUT{'diffs'}}($diffs); |
|
|
} |
} |
print "\n"; |
print "\n"; |
} |
} |
Line 503 sub cvstime {
|
Line 584 sub cvstime {
|
} |
} |
my $cvstime; |
my $cvstime; |
if ($buildmode!=3) { |
if ($buildmode!=3) { |
my $entry=`grep '^/$file/' ${path}CVS/Entries` or |
my $entry=`grep '^/$file/' ${path}CVS/Entries 2>/dev/null`; |
die('*** ERROR *** cannot grep against '.${path}. |
# or |
'CVS/Entries for ' .$file . "\n"); |
# die('*** WARNING *** cannot grep against '.${path}. |
my @fields=split(/\//,$entry); |
# 'CVS/Entries for ' .$file . "\n"); |
$cvstime=`date -d '$fields[3] UTC' --utc +"%s"`; |
if ($entry) { |
chomp $cvstime; |
my @fields=split(/\//,$entry); |
|
$cvstime=`date -d '$fields[3] UTC' --utc +"%s"`; |
|
chomp $cvstime; |
|
} |
|
else { |
|
$cvstime='n/a'; |
|
} |
} |
} |
else { |
else { |
$cvstime='n/a'; |
$cvstime='n/a'; |