続きです。
自作grep-changelogまずはバグ修正。3,4行目の$author、$textが、「.*」となっていたため、空行もヒットしてました。1文字以上とするため*を+に変更しました。
1 $_ = "@ARGV"; 2 s/--(\w+-?\w+) /--$1=/g; 3 $author='.+'; 4 $text='.+'; 5 $from_date='00000000'; 6 $to_date ='99999999'; 7
56,57行目で、ハイフン入り日付書式を$dtにハイフンなしの形に変換しています。
その$dtを使用しての日付のフィルタを60,61行目で処理しています。
54 foreach(sort keys %log){ 55 $id = $_; 56 /^(....).(..).(..)/; 57 $dt = $1.$2.$3; 58 @tmp = split /\t/,$log{$_}; 59 60 next if($dt < $from_date); 61 next if($dt > $to_date); 62 63 if($found{$id} > 0){ 64 if($id =~ /$author/){ 65 print "$id\n"; 66 foreach(@tmp){ 67 print" $_\n"; 68 } 69 print"\n"; 70 } 71 } 72 } takk@deb9:~/src/binutils-2.28/binutils$
63,64行目のifも、同じく1行にしてしまえば、見やすくなりますね。
ファイル名もt.plから、my-grep-changelog.plに変更。
全ソースです。完成に近づいてきました。
takk@deb9:~/src/binutils-2.28/binutils$ cat -n my-grep-changelog.pl 1 $_ = "@ARGV"; 2 s/--(\w+-?\w+) /--$1=/g; 3 $author='.+'; 4 $text='.+'; 5 $from_date='00000000'; 6 $to_date ='99999999'; 7 8 foreach(split / /){ 9 $author=$1 if(/--author=(\S+)/); 10 $text=$1 if(/--text=(\S+)/); 11 $exclude=$1 if(/--exclude=(\S+)/); 12 $from_date=$1.$2.$3 if(/--from-date=(\d\d\d\d)\-(\d\d)\-(\d\d)/); 13 $to_date=$1.$2.$3 if(/--to-date=(\d\d\d\d)\-(\d\d)\-(\d\d)/); 14 } 15 16 if($from_date > $to_date){ 17 exit 1; 18 } 19 20 %log=(); 21 opendir(DIR,"."); 22 @files = grep { /ChangeLog.*/ } readdir(DIR); 23 closedir(DIR); 24 25 $num = 1; 26 foreach(@files){ 27 open(INFILE,"<$_"); 28 $id = ""; 29 while(<INFILE>){ 30 chomp(); 31 s/^ /\t/; 32 if(/^\d\d\d\d\-\d\d\-\d\d/){ 33 $title = "$_"; 34 $num=0; 35 $id = $title .':::'. $num++; 36 next; 37 } 38 if(/^ \*/){ 39 $id = $title .':::'. $num++; 40 } 41 if(/^ |^ \*|^$/ && $id ne ""){ 42 if(/$text/){ 43 $log{$id} .= "$_"; 44 $found{$id} ++; 45 } 46 next; 47 } 48 last; 49 } 50 51 close(INFILE); 52 } 53 54 foreach(sort keys %log){ 55 $id = $_; 56 /^(....).(..).(..)/; 57 $dt = $1.$2.$3; 58 @tmp = split /\t/,$log{$_}; 59 60 next if($dt < $from_date); 61 next if($dt > $to_date); 62 next if($dt > $to_date); 63 next if($found{$id} <= 0); 64 next unless($id =~ /$author/); 65 66 print "$id\n"; 67 foreach(@tmp){ 68 print" $_\n"; 69 } 70 print"\n"; 71 } takk@deb9:~/src/binutils-2.28/binutils$
コメント