Observium_CE/scripts/rename-mibs.pl

132 lines
2.5 KiB
Perl
Executable File

#!/usr/bin/perl
use File::Basename;
use File::Copy;
use Getopt::Std;
use Digest::SHA qw(sha256_hex);
usage() unless (@ARGV);
my %options=();
getopts("fhse:", \%options);
usage() if defined $options{h};
for my $file (@ARGV)
{
my $from = $file;
my $dir = dirname($file);
my $to;
my $ext = '';
my $mib = '';
my $lines = 0;
if (defined $options{e} && $options{e}) {
$ext = '.'.$options{e};
}
if (open (FILEIN, $file))
{
while (<FILEIN>)
{
next if (/^\s*\-\-/ || /^\s*$/); # Skip comments and empty lines
next if (/FORCE\-INCLUDE/); # Skip some special words
$mib .= $_;
if ($mib =~ /\s*(\S+)\s*DEFINITIONS\s*\:\:\=\s*BEGIN/)
{
$to = $1;
last;
} elsif (/\s*OBJECT\s+IDENTIFIER/) {
# Break on OBJECT IDENTIFIER
last;
} elsif ($lines > 500) {
# Break limit line count
last;
}
$lines++;
}
close (FILEIN);
if (defined $to)
{
if (basename($from) eq basename($to.$ext))
{
print "skipping $file -- name is already correct\n";
} else {
if ($dir)
{
$to = $dir . '/' . $to . $ext;
}
if (-s $to && !defined $options{f})
{
my $same = compare_files($file, $to); # check if files same
if ($same && !defined $options{s}) {
# Same files, overwrite
move($from, $to);
print "renamed '$file' -> $to (overwritten)\n";
} else {
print "skipping $file -- file $to exist. Use -f flag for override\n";
}
} elsif (defined $options{s}) {
system("/usr/bin/svn mv $from $to");
#print "/usr/bin/svn mv $from $to\n";
} else {
move($from, $to);
print "renamed '$file' -> $to\n";
}
}
}
else
{
warn "no definition found inside $file\n";
}
}
else
{
warn "skipping $file -- unable to open ($!)";
}
}
sub usage
{
print <<END;
usage: $0 [OPTION] <MIB1> [MIB2 .. MIBn]
Renames one or more MIB files to match the definition inside the file.
OPTIONS
-h display this help and exit
-s use 'svn mv' instead system mv command
-e 'ext' use this file extension for renamed MIBs, by default without extension
END
exit 0;
}
sub compare_files
{
my ($file1,$file2)=@_;
open(my $fh1,"< ",$file1) or die $!;
open(my $fh2,"<",$file2) or die $!;
my $sha=Digest::SHA->new(256);
$sha->addfile($fh1); #Reads file.
my $hex1=$sha->hexdigest; #40 byte hex string.
$sha->reset;
$sha->addfile($fh2);
my $hex2=$sha->hexdigest;
close($fh1);
close($fh2);
#print "hex1: $hex1, hex2: $hex2\n";
return $hex1 eq $hex2;
}