Version-Munge.pl
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:3k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #!/usr/bin/perl
  2. use Getopt::Std;
  3. sub usage {
  4.     print "
  5. $0 [-v VERSION] -R -C -M -D -h
  6.   -M           Modify the files with a new version (-v required)
  7.   -v VERSION   Use VERSION as the version string
  8.   -T TAG       Use TAG as CVS tag (must being with Ext-)
  9.   -C           Commit changes to the files
  10.   -R           Reverse files (rm and cvs update)
  11.   -D           Compare files (cvs diff)
  12.   -f FILE      Just do a particular file
  13.   -t TYPE      Just do a particular type of file
  14.   -V           verbose
  15. ";
  16.     exit 1;
  17. }
  18. getopts("v:T:RCMDhnf:t:V",%opts) || usage();
  19. if ($opts{'h'}) { usage(); }
  20. if (!$opts{'v'} && $opts{'M'} && !$opts{'T'}) {
  21.   warn "no version (-v or -T) specified";
  22.   usage;
  23. }
  24. if (!$opts{'R'} && !$opts{'M'} && !$opts{'C'} && !$opts{'D'}) {
  25.   warn "nothing to do (need -R -C -D or -M)n";
  26.   usage;
  27. }
  28. my @exprs = (
  29.      # c files with a equal sign and a specific variable
  30.      { type => 'c',
  31.        expr => 'VersionInfo(s*=s*[^"]*)"(.*)"',
  32.        repl => 'VersionInfo$1"$VERSION"', 
  33.        files => [qw(snmplib/snmp_version.c)]},
  34.      # documentation files
  35.      { type => 'docs',
  36.        expr => 'Version: [.0-9a-zA-Z]+' =>
  37.        repl => 'Version: $VERSION', 
  38.        files => [qw(README FAQ dist/net-snmp.spec)]},
  39.      # sed files
  40.      { type => 'sed',
  41.        expr => '^s/VERSIONINFO/[^/]*' =>
  42.        repl => 's/VERSIONINFO/$VERSION',
  43.        files => [qw(sedscript.in)]},
  44.      # Makefiles
  45.      { type => 'Makefile',
  46.        expr => 'VERSION = '(.*)'',
  47.        repl => 'VERSION = '$VERSION'',
  48.        files => [qw(dist/Makefile)]},
  49.      # Doxygen config
  50.      { type => 'doxygen',
  51.        expr => 'PROJECT_NUMBER(s+)=(s+)'(.*)'',
  52.        repl => 'PROJECT_NUMBER$1=$2'$VERSION'',
  53.        files => [qw(doxygen.conf)]},
  54.      # perl files
  55.      { type => 'perl',
  56.        expr => 'VERSION = '(.*)'',
  57.        repl => 'VERSION = '$VERSION'',
  58.        files => [qw(perl/SNMP/SNMP.pm
  59.     perl/agent/agent.pm
  60.     perl/agent/default_store/default_store.pm
  61.     perl/default_store/default_store.pm
  62.     perl/OID/OID.pm
  63.     perl/ASN/ASN.pm
  64.     perl/AnyData_SNMP/Storage.pm
  65.     perl/AnyData_SNMP/Format.pm
  66.     perl/TrapReceiver/TrapReceiver.pm
  67.    )]}
  68.     );
  69. if ($opts{'T'} && !$opts{'v'}) {
  70.     $opts{'v'} = $opts{'T'};
  71.     die "usage error: version tag must begin with Ext-" if ($opts{'T'} !~ /^Ext-/);
  72.     $opts{'v'} =~ s/^Ext-//;
  73.     $opts{'v'} =~ s/-/./g;
  74. }
  75. $VERSION = $opts{'v'};
  76. for ($i = 0; $i <= $#exprs; $i++) {
  77.     next if ($opts{'t'} && $exprs[$i]{'type'} ne $opts{'t'});
  78.     foreach my $f (@{$exprs[$i]->{'files'}}) {
  79. next if ($opts{'f'} && $f ne $opts{'f'});
  80. if ($opts{'R'}) {
  81.     print "removing changes and updating $fn" if ($opts{'V'});
  82.     unlink($f);
  83.     system("cvs update $f");
  84. }
  85. if ($opts{'M'}) {
  86.     rename ($f,"$f.bak");
  87.     open(I,"$f.bak");
  88.     open(O,">$f");
  89.     while (<I>) {
  90. eval "s/$exprs[$i]->{'expr'}/$exprs[$i]->{'repl'}/";
  91. print O;
  92.     }
  93.     close(I);
  94.     close(O);
  95.     unlink("$f.bak");
  96.     print "modified $f using s/$exprs[$i]->{'expr'}/$exprs[$i]->{'repl'}/n" if ($opts{'V'});
  97. }
  98. if ($opts{'D'}) {
  99.     print "diffing $fn" if ($opts{'V'});
  100.     system("cvs diff $f");
  101. }
  102. if ($opts{'C'}) {
  103.     print "committing $fn" if ($opts{'V'});
  104.     system("cvs commit -m "- ($f): version tag ( $VERSION )" $f");
  105. }
  106.     }
  107. }