% BuildMonitor.tex
%	Last update: 2017/03/13 F.Kanehori
%\newpage
\subsubsection{build_monitor.bat}
\label{subsubsec:BuildMonitor}

引数で指定した2つのレビジョンについて、svnからビルド結果と実行結果を取り出して
レポートを作成する。


\medskip
\noindent
\bf{オプション引数}：
\begin{narrow}[\WID]
	\begin{tabular}{l@{\hspace{15pt}}l}
	    \tt{-k}	& \small{作業ファイルを残す}\\
	    \tt{-h}	& \small{Usageの表示}\\
	    \tt{-v}	& \small{バーバスモード(デフォルト)}\\
	    \tt{-s}	& \small{サイレントモード}\\
	    \tt{-D n}	& \small{デバッグレベル}\\
	    \tt{xxxx:yyyy}
			& \small{svnレビジョン番号の組}\\
	\end{tabular}
	\begin{narrow}\begin{tabular}{ll}
	    \tt{xxxx}：	& \small{OLDレビジョン
			  (ファイル\FILE{revision.old}の内容が優先)}\\
	    \tt{yyyy}：	& \small{NEWレビジョン
			  (ファイル\FILE{revision.new}の内容が優先)}\\
	\end{tabular}\end{narrow}
\end{narrow}

\bigskip
\noindent
\bf{出力ファイル}：
\begin{narrow}[\WID]
	\verb|\DailyBuild\Springhead2\test\report\Test.report|\\
	\verb|\DailyBuild\Springhead2\test\report\YYYY-MMDD.stblog.diff|\\
	\verb|\DailyBuild\Springhead2\test\report\YYYY-MMDD.bldlog.diff|\\
	\verb|\DailyBuild\Springhead2\test\report\YYYY-MMDD.runlog.diff|\\
	\verb|\DailyBuild\Springhead2\test\report\YYYY-MMDD.spllog.diff|
\end{narrow}

\medskip
\noindent
\bf{関連スクリプト}：
\begin{narrow}[\WID]
	``\ref{subsec:MakeReport} MakeReport.bat''と同じ
\end{narrow}

\medskip
\noindent
\bf{関連ファイル}：
\begin{narrow}[\WID]
	``\ref{subsec:MakeReport} MakeReport.bat''と同じ
\end{narrow}

\medskip
\noindent
\bf{関連プログラム}：
\begin{narrow}[\WID]
	``\ref{subsec:MakeReport} MakeReport.bat''と同じ
\end{narrow}

\bigskip
\noindent
\bf{処理の説明}：
\begin{narrow}[15pt]\begin{enumerate}
  \item	下位処理プログラムのオプションの定義\\
        ビルド結果の差分をとるための下位プログラムへ渡す引数を設定する。
	\vspace{.5ex}
	\begin{narrow}
		\def\tmpRef{\ref{subsubsec:MakeReport:DirUsed}. 参照}
		\begin{tabular}{lll}
		    \ENV{MYDIFFOPT} & \tt{mydiff.pl}へ渡す引数 & \tmpRef\\
		    \ENV{FILTEROPT} & \tt{filter.pl}へ渡す引数 & \tmpRef\\
		\end{tabular}
	\end{narrow}
	\medskip
	
  \item	現在の日付と時刻
	\begin{narrow}\begin{tabular}{l}
		\ENV{DATESTR}の形式は\tt{"YYYY-MMDD hh:mm:ss"}
	\end{tabular}\end{narrow}
	\medskip

  \item	結果を報告するメールに関して\\
	今のところメール機能は使用していない。
	\begin{description}
	  \item[※]
		メール機能はWindowsでは動かない(\tt{/usr/sbin/sendmail}を使うから)
	\end{description}
	\medskip

  \item	\label{subsubsec:MakeReport:DirUsed}
	使用するディレクトリの定義(丸括弧内は設定変数名)
	\begin{narrow}[30pt]\begin{minipage}{.8\textwidth}
	\dirtree{%
		.1 {\hspace{-10mm}Springhead2\YEN}.
		.2 test\YEN.
		.3 Monitoring\YEN.
		.4 bin\YEN
			\mc{\footnotesize{ \CDOTS 関連するプログラムとスクリプト
			を配置(\ENV{BINDIR})}}.
		.4 etc\YEN
			\mc{\footnotesize{ \CDOTS 関連するデータファイル
			を配置(\ENV{ETCDIR})}}.
		.3 report\YEN
			\mc{\footnotesize{ \CDOTS 作成するレポートファイル
			を配置(\ENV{REPDIR})}}.
		.4 tmp\YEN
			\mc{\footnotesize{ \CDOTS 作業領域(\ENV{TMPDIR})}}.
	}
	\end{minipage}\end{narrow}
	\medskip

  \item	使用するプログラムの定義(丸括弧内は設定変数名、角括弧内は使用言語)%\\
	%\VUP
	\vspace{-2ex}
	\begin{narrow}[10pt]\begin{longtable}{@{\hspace{40pt}}ll}
	    \tt{order.pl}
		& Visual Studioが出力したビルドログの内容を、モジュール毎、\\
		& スレッド毎、出現順に並び替える。(\ENV{ORDER})[perl]\\
		& ライブラリ\tt{base_lib.pm}, \tt{dailybuild_lib.pm}を使用する。\\
	    \tt{mydiff.pl}
		& \tt{order.pl}で並べ替えたログファイル2つについて差分をとる。\\
		& 差分処理はモジュール単位で行なう。(\ENV{MYDIFF})[perl]\\
	    \tt{filter.pl}
		& \tt{mydiff.pl}でとった差分情報について、\tt{diff -c}形式に倣った\\
                & 出力情報を作成する。(\ENV{FILTER})[perl]\\
	    \tt{nlconv.exe}	& 改行コードの変換(使用しない)\\
	    \tt{nkf.exe}	& 漢字コードの変換(使用しない)\\
	    \tt{field.awk}	& sepで行を分解し、filed番目の欄を返す。[gawk]\\
	    \tt{grep.awk}
		& pat=revなら\tt{"r[0-9]+"}で始まる行を、pat=headなら\tt{"HEAD"}\\
		& で始まる行を返す。[gawk]\\
	    \tt{line.awk}	& line番目の行を返す。[gawk]\\
	    \tt{exclude.awk}
		& レポートに不要な行を削除する(現在はしていない)。[gawk]
	\end{longtable}\end{narrow}
	\vspace{-5ex}

  \item	レビジョン範囲の決定
	\begin{narrow}
		この時点で変数\tt{ARGC}が1ならば(それは\tt{xxxx:yyyy}のはずなので)、
		\tt{xxxx}\\
		と\tt{yyyy}をそれぞれ\ENV{OLDREV}と\ENV{NEWREV}に取り出す。
	\end{narrow}

  \item	次のsvn(URL)を使用する
	\begin{narrow}[13pt]\begin{tabular}{ll}
	    \ENV{SVNURL}    & svnのトップURL\\
	    \ENV{STBLOGURL} & \FILE{StubBuild.log}のURL\\
	    \multicolumn{2}{l}{\small{(以下同様)}}\\
	\end{tabular}\end{narrow}
	\medskip

  \item	使用するファイル名(入力側)
	\begin{narrow}[13pt]\begin{tabular}{ll}
	    \ENV{OLDREVFILE} & 比較基準レビジョンを指定するファイル\\
	    \ENV{NEWREVFILE} & 最新のレビジョンを指定するファイル\\
	    \ENV{SVNLOGTMP}  & 作業ファイル\\
	\end{tabular}\end{narrow}
	\medskip

  \item	シグナルトラップの設定\\
	未使用

  \item	比較の基となるレビジョン(old-revision)の決定\\
	引数で\ENV{OLDREV}が指定されなかったなら\ENVREF{OLDREVFILE}から読み出す。

  \item	比較するレビジョン(new--revision)の決定\\
	引数で\ENV{NEWREV}が指定されなかったなら\ENVREF{NEWREVFILE}から読み出す。

  \item	svnから\ENVREF{OLDREV}の日付と時刻を取得する\\
	\ENV{OLDDATE}と\ENV{OLDTIME}に設定する。

  \item	svnから\ENVREF{NEWREV}の日付と時刻を取得する\\
	\ENV{NEWDATE}と\ENV{NEWTIME}に設定する。

  \item	出力するファイル名を決める(\ENVREF{NEWDATE}を用いる)\\
	レポートファイルは\ENVREF{REPDIR}に、作業ファイルは\ENVREF{TMPDIR}に作成する。
	\begin{narrow}
		\small{ファイル名 = }
			\verb+{stb|bld|run|spl}[err]log.{old|new|diff}+
		\vspace{-2ex}
		\small{\begin{longtable}{ll@{\hspace{70pt}}}
		    \tt{stb}  & ライブラのリビルド\\
		    \tt{bld}  & \tt{src/tests}のビルド\\
		    \tt{run}  & \tt{src/tests}の実行\\
		    \tt{spl}  & \tt{src/Samples}のビルド\\
		    \tt{err}  & 上記の中でのエラー情報\\
		    \tt{old}  & \ENVREF{OLDREV}関連\\
		    \tt{new}  & \ENVREF{NEWREV}関連\\
		    \tt{diff} & \ENVREF{OLDREV}と\ENVREF{NEWREV}との差分関連\\
		\end{longtable}
		\vspace{-2ex}
		\begin{description}
		  \item[※]
			\tt{stb,bld,run,spl}以外のテストを組み込むときは
			適宜名前を追加すること。
		\end{description}}
	\end{narrow}

  \item	\ENVREF{OLDREV}と\ENVREF{NEWREV}のログファイルを取り出す\\
	svnからログ情報を取り出し、モジュール単位かつスレッド順に並べ替える。

  \item	\label{subsubsec:MakeReport:Diff}
	差分をとる\\
	\ENVREF{OLDREV}と\ENVREF{NEWREV}との差分をとる。(作業ファイル)

  \item	参考情報を作成する(ShiftJIS)\\
	\ref{subsubsec:MakeReport:Diff}. のうち、
	エラー情報以外を参考情報ファイルにコピーする。
        漢字コードの変換はしていない(Windowsで実行するから不要)。

  \item	レポートファイルにまとめる\\
	レポートファイルには次の項目を記載する。
	\begin{narrow}[\WID]
		\begin{enumerate}
		  \item	作成日付
		  \item	新旧レビジョン番号
		  \item	ライブラリのビルドエラーログ
		  \item	\tt{src/tests}のビルドエラーログ
		  \item	\tt{src/tests}の実行ログの新旧差分
		  \item	\tt{src/Samples}のビルドエラーログ
		\end{enumerate}
	\end{narrow}

  \item	改行コードをDOS形式にする(ShiftJis漢字が含まれているのでWindowsで見る)\\
        実行しない(コメントアウト)

  \item	結果をメールする\\
        実行しない(コメントアウト)
	\begin{description}
	  \item[※]
		メール機能を活かすなら、ここのコメントを外すだけでなく、
		\ENV{REPORTBYMAIL}の設定を見直すこと
		(現在\ENV{REPORTBYMAIL}は強制的に0に設定されている)。
	\end{description}

  \item	後始末をして終了\\
	作業ファイルを削除して終了する。ただし\tt{-k}オプションが指定されていたら、
	作業ファイルはそのまま残す。

\end{enumerate}\end{narrow}

% end: BuildMonitor.tex
