171 lines
4.4 KiB
Perl
Executable File
171 lines
4.4 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use Getopt::Std;
|
|
|
|
sub usage {
|
|
print "
|
|
$0 [-v VERSION] -R -C -M -D -h
|
|
|
|
-M Modify the files with a new version (-v required)
|
|
-v VERSION Use VERSION as the version string
|
|
-T TAG Use TAG as SVN tag (must being with Ext-)
|
|
-C Commit changes to the files
|
|
-R Revert changes to the files
|
|
-D Compare files (svn diff)
|
|
-f FILE Just do a particular file
|
|
-t TYPE Just do a particular type of file
|
|
-P Print resulting modified lines
|
|
-V verbose
|
|
";
|
|
exit 1;
|
|
}
|
|
|
|
getopts("Pv:T:RCMDhnf:t:V",\%opts) || usage();
|
|
if ($opts{'h'}) { usage(); }
|
|
|
|
if (!$opts{'v'} && $opts{'M'} && !$opts{'T'}) {
|
|
warn "no version (-v or -T) specified";
|
|
usage;
|
|
}
|
|
if (!$opts{'R'} && !$opts{'M'} && !$opts{'C'} && !$opts{'D'}) {
|
|
warn "nothing to do (need -R -C -D or -M)\n";
|
|
usage;
|
|
}
|
|
|
|
my @exprs = (
|
|
# documentation files
|
|
{ type => 'docs',
|
|
expr => 'Version: [\.0-9a-zA-Z]+',
|
|
repl => 'Version: $VERSION',
|
|
files => [qw(README FAQ dist/net-snmp.spec)],
|
|
not_required => {'dist/net-snmp.spec' => 1}
|
|
},
|
|
|
|
# Makefiles
|
|
{ type => 'Makefile',
|
|
expr => 'VERSION = [\.0-9a-zA-Z]+',
|
|
repl => 'VERSION = $VERSION',
|
|
files => [qw(dist/Makefile)],
|
|
not_required => {'dist/Makefile' => 1}
|
|
},
|
|
|
|
# perl files
|
|
{ type => 'perl',
|
|
expr => 'VERSION = \'(.*)\'',
|
|
repl => 'VERSION = \'$VERSION_FLOAT\'',
|
|
files => [qw(perl/SNMP/SNMP.pm
|
|
perl/agent/agent.pm
|
|
perl/agent/Support/Support.pm
|
|
perl/agent/default_store/default_store.pm
|
|
perl/default_store/default_store.pm
|
|
perl/OID/OID.pm
|
|
perl/ASN/ASN.pm
|
|
perl/AnyData_SNMP/Storage.pm
|
|
perl/AnyData_SNMP/Format.pm
|
|
perl/TrapReceiver/TrapReceiver.pm
|
|
)],
|
|
not_required => {'perl/agent/Support/Support.pm' => 1}
|
|
},
|
|
|
|
# configure script files
|
|
{ type => 'configure',
|
|
expr => 'AC_INIT\\(\\[Net-SNMP\\], \\[([^\\]]+)\\]',
|
|
repl => 'AC_INIT([Net-SNMP], [$VERSION]',
|
|
files => [qw(configure.ac)],
|
|
exec => 'autoconf',
|
|
exfiles => [qw(configure)],
|
|
},
|
|
|
|
);
|
|
|
|
#
|
|
# set up versioning information
|
|
#
|
|
if ($opts{'T'} && !$opts{'v'}) {
|
|
$opts{'v'} = $opts{'T'};
|
|
die "usage error: version tag must begin with Ext-" if ($opts{'T'} !~ /^Ext-/);
|
|
$opts{'v'} =~ s/^Ext-//;
|
|
$opts{'v'} =~ s/-/./g;
|
|
}
|
|
$VERSION = $opts{'v'};
|
|
$VERSION_FLOAT = floatize_version($VERSION);
|
|
|
|
|
|
#
|
|
# loop through all the expression types
|
|
#
|
|
my @files;
|
|
for ($i = 0; $i <= $#exprs; $i++) {
|
|
|
|
# drop other file types if only one was requested.
|
|
next if ($opts{'t'} && $exprs[$i]{'type'} ne $opts{'t'});
|
|
|
|
# loop through each file and process
|
|
foreach my $f (@{$exprs[$i]->{'files'}}) {
|
|
|
|
# skip files that weren't specifically in the todo list if need be
|
|
next if ($opts{'f'} && $f ne $opts{'f'});
|
|
|
|
# remove the changes and revert to SVN
|
|
if ($opts{'R'}) {
|
|
print "removing changes and updating $f\n" if ($opts{'V'});
|
|
system("svn revert $f");
|
|
}
|
|
|
|
# make sure it exists
|
|
if (! -f $f) {
|
|
if (!exists($exprs[$i]->{'not_required'}{$f})) {
|
|
print STDERR "FAILED to find file $f\n";
|
|
exit(1);
|
|
} else {
|
|
print STDERR "SKIPPING file $f\n";
|
|
next;
|
|
}
|
|
}
|
|
|
|
# modify the files with the version
|
|
if ($opts{'M'}) {
|
|
rename ($f,"$f.bak");
|
|
open(I,"$f.bak");
|
|
open(O,">$f");
|
|
while (<I>) {
|
|
my $res = eval "s/$exprs[$i]->{'expr'}/$exprs[$i]->{'repl'}/";
|
|
if ($res && $opts{'P'}) {
|
|
my $shortened = $_;
|
|
$shortened =~ s/^\s*//;
|
|
printf("%s:\n %s", $f, $shortened);
|
|
}
|
|
print O;
|
|
}
|
|
close(I);
|
|
close(O);
|
|
unlink("$f.bak");
|
|
push @files, $f;
|
|
print "modified $f using s/$exprs[$i]->{'expr'}/$exprs[$i]->{'repl'}/\n" if ($opts{'V'});
|
|
}
|
|
|
|
# run diff if requested.
|
|
if ($opts{'D'}) {
|
|
print "diffing $f\n" if ($opts{'V'});
|
|
system("svn diff $f");
|
|
}
|
|
}
|
|
system($exprs[$i]->{'exec'}) if ($exprs[$i]->{'exec'});
|
|
push @files, @{$exprs[$i]->{'exfiles'}} if ($exprs[$i]->{'exfiles'});
|
|
}
|
|
|
|
#
|
|
# commit the modified files
|
|
#
|
|
if ($opts{'C'}) {
|
|
my $files = join(" ",@files);
|
|
print "committing $files\n" if ($opts{'V'});
|
|
$ret = system("svn commit -m \"- version tag ( $VERSION )\" $files");
|
|
exit($ret);
|
|
}
|
|
|
|
sub floatize_version {
|
|
my ($major, $minor, $patch, $opps) = ($_[0] =~ /^(\d+)\.(\d+)\.?(\d*)\.?(\d*)/);
|
|
return $major + $minor/100 + $patch/10000 + $opps/100000;
|
|
}
|