scancvslog.pl

来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· PL 代码 · 共 113 行

PL
113
字号
#!/usr/bin/perlrequire"timelocal.pl";## usage scancvslog.pl logfile starttime tag## this will extract all entries from the specified cvs log file# that have a date later than or equal to starttime and a tag# value of tag. If starttime is not specified, all entries are# extracted. If tag is not specified then entries for all# branches are extracted. starttime must be specified as# "monthname day, year"## Example to extract all entries for SAMBA_2_2 branch from the# log file named cvs.log ## scancvslog.pl cvs.log "" SAMBA_2_2### To extract all log entries after Jan 10, 1999 (Note month name# must be spelled out completely).## scancvslog.pl cvs.log "January 10, 1999" #open(INFILE,@ARGV[0]) || die "Unable to open @ARGV[0]\n";%Monthnum = (	"January",	0,	"February",	1,	"March",	2,	"April",	3,	"May",		4,	"June",		5,	"July",		6,	"August",	7,	"September",	8,	"October",	9,	"November",	10,	"December",	11,	"Jan",		0,	"Feb",		1,	"Mar",		2,	"Apr",		3,	"May",		4,	"Jun",		5,	"Jul",		6,	"Aug",		7,	"Sep",		8,	"Oct",		9,	"Nov",		10,	"Dec",		11);$Starttime = (@ARGV[1]) ? &make_time(@ARGV[1]) : 0;$Tagvalue = @ARGV[2];while (&get_entry) {  $_=$Entry[0];# get rid of extra white space  s/\s+/ /g;# get rid of any time string in date  s/ \d\d:\d\d:\d\d/,/;  s/^Date:\s*\w*\s*(\w*)\s*(\w*),\s*(\w*).*/$1 $2 $3/;  $Testtime = &make_time($_);  $Testtag = &get_tag;  if (($Testtime >= $Starttime) && ($Tagvalue eq $Testtag)) {    print join("\n",@Entry),"\n";  }}close(INFILE);sub make_time {  $_ = @_[0];  s/,//;  ($month, $day, $year) = split(" ",$_);  if (($year < 1900)||($day < 1)||($day > 31)||not length($Monthnum{$month})) {    print "Bad date format @_[0]\n";    print "Date needs to be specified as \"Monthname day, year\"\n";    print "eg: \"January 10, 1999\"\n";    exit 1;  }  $year = ($year == 19100) ? 2000 : $year;  $month = $Monthnum{$month};  $Mytime=&timelocal((0,0,0,$day,$month,$year));}sub get_tag {  @Mytag = grep (/Tag:/,@Entry);  $_ = @Mytag[0];  s/^.*Tag:\s*(\w*).*/$1/;  return $_;}sub get_entry {  @Entry=();  if (not eof(INFILE)) {    while (not eof(INFILE)) {      $_ = <INFILE>;      chomp $_;      next if (not ($_));      if (/^\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/) {	next if ($#Entry == -1);	push(Entry,$_);	return @Entry;      } else {	push(Entry,$_);      }    }  }  return @Entry;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?