株分けしたChangeLogを接ぎ木する

今回は、前回のスクリプトを改造して、フィルタリングできるようにします。
前回のスクリプトはこれです。

takk@deb9:~/src/binutils-2.28/binutils$ cat -n t.pl
     1	%log=();
     2	opendir(DIR,".");
     3	@files = grep { /ChangeLog/ } readdir(DIR);
     4	closedir(DIR);
     5	
     6	foreach(@files){
     7		open(INFILE,"<$_");
     8		$id = "";
     9		while(<INFILE>){
    10			chomp();
    11			if(/^\d\d\d\d-\d\d-\d\d/){
    12				$id = "$_";
    13				next;
    14			}
    15			if(/^	|^$/ && $id ne ""){
    16				$log{$id} .= "$_";
    17				next;
    18			}
    19			last;
    20		}
    21	
    22		close(INFILE);
    23	}
    24	
    25	foreach(keys %log){
    26		$id = $_;
    27		@tmp = split /\t/,$log{$_};
    28	
    29		print "$id\n";
    30		foreach(@tmp){
    31			print"	$_\n";
    32		}	
    33		print"\n";
    34	}
takk@deb9:~/src/binutils-2.28/binutils$ 

変更1箇所目は、ファイルの先頭で、フィルタリングするパターンをパラメータから取得。

      	pattern = $ARGV[0];
     1	%log=();
     2	opendir(DIR,".");
     3	@files = grep { /ChangeLog/ } readdir(DIR);
     4	closedir(DIR);

2箇所目は、パターンにマッチするログを見つけた時に、フラグで覚えておく処理。

    15			if(/^	|^$/ && $id ne ""){
    16				$log{$id} .= "$_";
      				$found{$id} ++ if(/$pattern/);
    17				next;
    18			}

3箇所4箇所目は、フラグをチェックして表示するかどうかの判定する処理。

    25	foreach(keys %log){
    26		$id = $_;
    27		@tmp = split /\t/,$log{$_};
    28	
      		if($found{$id} > 0){
    29		print "$id\n";
    30		foreach(@tmp){
    31			print"	$_\n";
    32		}	
    33		print"\n";
      		}
    34	}

使ってみます。

takk@deb9:~/src/binutils-2.28/binutils$ perl t.pl bin2c | head -20
2009-08-28  H.J. Lu  <hongjiu.lu@intel.com>
	
	* Makefile.am (sysinfo$(EXEEXT_FOR_BUILD)): Replace
	CFLAGS/LDFLAGS with CFLAGS_FOR_BUILD/LDFLAGS_FOR_BUILD.
	(syslex.o): Likewise.
	(sysinfo.o): Likewise.
	(bin2c$(EXEEXT_FOR_BUILD)): Likewise.
	* Makefile.in: Regenerated.

2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
	
	* Makefile.am (AM_CPPFLAGS): Renamed from ...
	(INCLUDES): ... this.
	(bin2c$(EXEEXT_FOR_BUILD): Adjust rule.
	(installcheck-local): Renamed from ...
	(installcheck): ... this.
	* Makefile.in: Regenerate.
	* Makefile.am (AUTOMAKE_OPTIONS): Remove cygnus, add no-dist and
	foreign.
	(MKDEP, CLEANFILES): Remove now-unneeded variables.
takk@deb9:~/src/binutils-2.28/binutils$ 

日付が順番に並んでないのが気になりますね。25行目のkeysを、sortで並べ替えしておきます。

    25	foreach(sort keys %log){
    26		$id = $_;
    27		@tmp = split /\t/,$log{$_};
    28	
      		if($found{$id} > 0){
    29		print "$id\n";
    30		foreach(@tmp){
    31			print"	$_\n";
    32		}	
    33		print"\n";
      		}
    34	}
takk@deb9:~/src/binutils-2.28/binutils$ perl tt.pl bin2c | sed -ne '/^2/p'
2008-08-25  Alan Modra  <amodra@bigpond.net.au>
2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
2009-08-28  H.J. Lu  <hongjiu.lu@intel.com>
2010-11-05  Alan Modra  <amodra@gmail.com>
takk@deb9:~/src/binutils-2.28/binutils$ 

grep-changelogの結果と比較してみます。

takk@deb9:~/src/binutils-2.28/binutils$ grep-changelog --text bin2c ChangeLog* | sed -ne '/^2/p'
2007-07-05  Nick Clifton  <nickc@redhat.com>
2007-02-28  Alan Modra  <amodra@bigpond.net.au>
2007-02-28  Alan Modra  <amodra@bigpond.net.au>
2007-02-27  Alan Modra  <amodra@bigpond.net.au>
2007-02-27  Alan Modra  <amodra@bigpond.net.au>
2007-02-27  Alan Modra  <amodra@bigpond.net.au>
2008-08-25  Alan Modra  <amodra@bigpond.net.au>
2009-08-28  H.J. Lu  <hongjiu.lu@intel.com>
2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
2010-11-05  Alan Modra  <amodra@gmail.com>
2010-11-05  Alan Modra  <amodra@gmail.com>
2010-01-26  Tristan Gingold  <gingold@adacore.com>
takk@deb9:~/src/binutils-2.28/binutils$ 

抽出されるログの数が異なりました。
次回スクリプトの間違いを探していきます。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA