#!/usr/bin/env perl use strict; use Cwd; use English; use Getopt::Long; use File::Basename; use IO::File; use IO::Handle; sub usage { die <<'EOF'; SYNOPSIS check_lockedfiles [options] checks that any files in the $CASEROOT/LockedFiles directory match those in the $CASEROOT directory (assumes that this utility exists in $CASEROOT/Tools) OPTIONS -loglevel Set verbostity of script -help [or -h] Print usage to STDOUT (optional). EOF } my %opts = (loglevel=>"INFO", cimeroot=>$ENV{CIMEROOT}); GetOptions( "cimeroot=s" => \$opts{cimeroot}, "loglevel=s" => \$opts{loglevel}, "h|help" => \$opts{'help'}, ) or usage(); my @dirs = ("$opts{cimeroot}/utils/perl5lib" ); unshift @INC, @dirs; require Log::Log4perl; my $level = Log::Log4perl::Level::to_priority($opts{loglevel}); Log::Log4perl->easy_init({level=>$level, layout=>'%m%n'}); my $logger = Log::Log4perl::get_logger(); # Give usage message. usage() if $opts{'help'}; `./xmlchange -noecho -loglevel $opts{loglevel} BUILD_STATUS=0`; my @lockedfiles = glob ("./LockedFiles/*"); foreach my $lockedfile (@lockedfiles) { my $file = basename("$lockedfile"); $logger->info("Checking file $file"); if (!-f $file) { $logger->logdie ("Locked file $file cannot be found"); } my $sysmod = "cmp -s $lockedfile $file "; if (system($sysmod) != 0) { $logger->warn( "$file has been modified and is different than the LockedFiles version "); if ($file =~ /env_build/ ) { $logger->warn( "setting BUILD_COMPLETE to FALSE "); `./xmlchange -noecho -file env_build.xml -id BUILD_COMPLETE -val FALSE`; `./xmlchange -noecho -file env_build.xml -id BUILD_STATUS -val 1`; my $pioversion = `xmlquery PIO_VERSION -value`; my $oldpioversion = `xmlquery PIO_VERSION -value -file LockedFiles/env_build.xml`; if($pioversion != $oldpioversion){ $logger->warn("Changing PIO_VERSION requires running case.clean_build -all"); `./xmlchange -noecho -file env_build.xml -id BUILD_STATUS -val 2`; } } elsif ($file =~ /.*env_mach_pes.*/) { $logger->logdie ("Invoke case.setup -clean followed by case.setup "); } else { $logger->logdie ("Cannot change $file, please recover the original copy from LockedFiles"); } } } exit (0);