続きです。
自作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$


コメント