-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ビルド時間とアーティファクトサイズの軽減が狙いですが、主としてバッチのリファクタリングです。 #626
Conversation
cmd /C "call "%Batch%" %Platform% %Config%" ^ | ||
|| exit /b 1 | ||
call :StopWatch | ||
echo ---- end %Batch% [%StopDate% %StopTime% / %Elapsed% seconds elapsed.] ---- |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
わりと見かけると思うのですが、こういうメッセージで s を脱着するまではしないけれど、括弧を付けずにはいられない(second(s)
)几帳面さが日本語使いには理解しがたいものがあります。
マーク・ピーターセンさんの古典的名著『日本人の英語』を読むとそういう、(不)定冠詞を軽視した態度は厳に改めるべきものだと反省させられます。英語ネイティブはまず a や the を発話してから、具体的な名詞となる単語を頭の中で探すことがあるらしいですよ。そっちが核なんですね。
この echo メッセージも改めるべきなのかもしれません。
call :StartWatch | ||
echo ---- start %Batch% [%StartDate% %StartTime%] ---- | ||
echo. | ||
cmd /C "call "%Batch%" %Platform% %Config%" ^ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cmd /C "%Batch%"
の代わりに call|"%Batch%"
でもいけそうですがあまりに趣味的なのでやめておきます。
`%time%‘ の書式がロケール依存なのを嫌って powershell のワンライナー書いた人がいるみたいです。 とりあえず「使いやすい」からバッチにしてますけど、バッチにこだわる必要はないと思ってます。計時部分だけ wsh とかもアリだと思います。(計時に他プロセス起動していいのか?という根源的なツッコミは置いておいて・・・。) そもそも、すでに一部pythonを使った処理が入りこんでいますよね?unix系文化では使えるもんはなんでも使う系のビルドスクリプトが多いように思います。c-shellオンリーで外部コマンド禁止みたいな縛りプレイを要求されるのは業務だけであって欲しいです 😢 |
計時機能についてダメ出し、というか単に趣味の問題なんですが。 こうなってるんですけど、 call :StartWatch
echo ---- start %Batch% [%StartDate% %StartTime%] ----
echo.
cmd /C "call "%Batch%" %Platform% %Config%" ^
|| exit /b 1
call :StopWatch
echo ---- end %Batch% [%StopDate% %StopTime% / %Elapsed% seconds elapsed.] ----
echo.
exit /b 0
:StartWatch こうならんですかね? call :StartWatch "%LogFileName%" "%Batch%" %Platform% %Config% || exit /b 1
exit /b 0
:StartWatch
set LogFileName=%~2
shift /2
:: この辺に時刻取得処理がある
echo ---- start %1 [%StartDate% %StartTime%] ---- > "%LogFileName%"
echo. > "%LogFileName%"
cmd /C %* > "%LogFileName%" || exit /b 1
:: この辺に時刻取得処理がある
echo ---- end %1 [%StopDate% %StopTime% / %Elapsed% seconds elapsed.] ---- > "%LogFileName%"
echo. > "%LogFileName%" こういう構成の場合、 |
今のところ %DATE% の差異は確認しましたが %TIME% の違いは確認していません。
目的がよくわかりません。ファイルを分けるにしても、とっちらかるのに勝る理由が欲しいです。 それと以前ここの githash.h に関するやりとりで知ったのですが、ラベル呼び出しをリダイレクトできるらしいです。
|
start & end を出すのは計時機構の一部だと思います。 |
start & end を出していたのは build-all.bat と tests/build-and-test.bat です。そこにタイムスタンプを埋め込みました。 外部バッチ化して引数としてテンプレート文字列を受け取り、キーワード( 他で引き合いが出てきてから汎用ツール化するのでいいと思います。 |
単体ファイル化(Watch.bat)するとこうです。
こうやって使います。
|
setlocal したら Start と Stop の間で環境変数が維持されないでしょう。setlocal を外して親環境を汚染しようとしても新しいコマンドインタープリタ上で実行されていればそれも叶いません。決まった名前の一時ファイルを使用すると一度に一か所からしか使えません。どうやって汎用ツール化するのかわからなくなってしまいました(今のところそのつもりはありませんが)。 |
@@ -1,19 +1,57 @@ | |||
@echo off | |||
setlocal ENABLEDELAYEDEXPANSION |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
遅延環境変数を利用したい CMAKE_PATH_FIX が呼び出し元の PATH 環境変数に影響を与えるためにこの場所で setlocal しましたが、endlocal & set PATH=%PATH%
することにより setlocal を CMAKE_PATH_FIX 内部のみで完結させられます。
b31704b
to
59eeaf7
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
あらためて内容確認しましたが、これ #653 と内容被りますね。
入れる前提で考えると事前調整が必要と思われます。
全体的な総括として、修正前後のバッチ記述の技術レベルに差がありすぎて、何がどう変わっているかを把握するのが難しいコミットだと思いました。
取りうる対応として2通り。
- 動いてるからこれで行こうぜ!で突き進むパターン
- 変更内容をぼくらが理解できるまで説明するパターン
問題発生時に即対応できるなら 1. でもいいと思ってます。少なくとも個人的には。
あと、全体見渡してみて気付いた点ですが、
googletest submoduleの更新がPRに含まれています。
もしも意図する変更であれば、これはPRを分けるべきと思います。
59eeaf7
to
98b0d81
Compare
こんばんは。お久しぶりです>@berryzplus さん
そうでしょうか。Files Changed > Jump to... からファイル一覧が見られますが、見事にかぶりなしに見えました。
リファクタリングを行う1コミット目は、動いている一事を以て「行こうぜ!」と考えてもらえるとありがたいです。説明は望むところですが、テクニカルな説明に終始する予感がします。 2コミット目以降はたとえば「Release と Debug でビルド内容を分ける」ことについて、いま分ける必要があるのか、分けるとしてその分配など、一度は検討してもらいたいと思っています。 force-push について。 現在の master に rebase して googletest の変更を取り除きました。内容の修正は計時機能に関して時刻が 23:59:59 から 00:00:00 に巻き戻るときに加算する補正値を (24 * 3600) 秒にしたことのみです。動いているかどうかは AppVeyor 待ちです。 |
IE誤動作のため。request changesをdismissしたかっただけです。
これが直ってたのでdismissしようとしたらIE11が暴走...orz |
* コードの繰り返しを配列データに変換し、ビルド別に実行内容を取捨選択しやすく。 * バッチの実行環境(echo, PATH, カレントディレクトリなど)をバッチ毎に切り離す。 親から子への継承は引き続き行われるが、子から親へ影響を与えることができなくなる。 * pushd, popd の使用を減らし、バッチ中断時に変なディレクトリに残されないように。 * CMake のために sh.exe を PATH から外す対策をより汎用的に。 ※遅延環境変数が必要だが PATH 操作を外部に作用させるためにサブルーチン単位で SETLOCAL はできない。 * バッチの親子で共有される環境変数 ERROR_RESULT の使用をやめ、SETLOCAL する。
* MinGW ビルドでテストプログラム置き場を Configuration 別に分ける。 * run-tests.bat でテストプログラムの再帰探索範囲を狭められる。
* run-tests.bat は --gtest_list_tests オプションを内包するだけの意味しか持っていなかった。 * test_result_filter_tell_AppVeyor.bat は AppVeyor に特有なので appveyor.yml に書くのが適当。
* Cppcheck には Config の別を伝えていないので、Config:Debug でだけ実行すれば十分。 * ヘルプとインストーラの作成は Config:Release でだけ実行する。
98b0d81
to
687351a
Compare
気がついたので最新の master に rebase しました。 |
#615 のコミット再構成版です。
コミット構成について
リファクタリングを目的とした最初のコミット(9959259)が以降のコミットのベースになっています。2番目以降のコミットの取捨選択は容易ですが、1番目のコミットなしでは2番目以降のコミットが成り立ちません。
そういうわけでひとつの PR にまとめていますが、コミット毎に採用可否を判断していただければと思います。
大きな修正は1番目だけで、他は小さな変更ばかりです。