2012-08-06 7 views
6

pyflakesを使用して自分のコードをビルドプロセスに統合しようとしています。私は私のMakefileで、次のターゲットを定義した:find -execがゼロでない場合にmakeを終了します。

pyflakes: 
    find $(APPLICATION_DIRECTORY) -iname "*.py" -exec pyflakes "{}" \; 

問題がfind戻り0コードの問題(pyflakes戻っていない0)があっても、すべての時間とmakeが成功したということです。理想的には、すべてのソースファイルに対してチェックを実行し、少なくとも-execのいずれかが失敗した場合は、makeを停止します。これを達成する方法はありますか?

答えて

4

find復帰コードを-execに戻す方法がないと仮定します。
どう動くはずですがxargsにパイピングされています

find $(APPLICATION_DIRECTORY) -iname "*.py" |xargs -I file pyflakes file 
3

pyflakesは0

find . -iname '*.jpg' | \ 
while read line ; do 
    pyflakes "$line" 
    res=$? 
    if [ $res -ne 0 ] ; then 
     exit $res 
    fi 
done 
+1

'cmd; if [$? -ne 0];その後、foo; fiはちょうど反パターンである。適切な方法は '' cmd ''なのです。その後、foo; fi'または単純に 'cmd || foo'。 – tripleee

+0

はこれを書きます。編集されたバージョンを参照してください。 –

+0

改善は見られません。あなたが望む編集は 'pyflakes"です$ line "|| exit $? '、短く単純です。 – tripleee

1

メイク以外の終了ステータスを返したときは、ちょうどパイプの出力は、独自の処理ループして終了に見つけることができます

pyflakes: 
    find $(APPLICATION_DIRECTORY) -iname "*.py" -exec bash -c 'pyflakes {}; if [[ $$? != 0 ]]; then kill -INT $$PPID;fi' \; 

これはmakefileに入りますが、これはスクリプトファイルではありません構文は次のとおりです。

+0

'-exec bash -c 'と書くだけで十分です。pyflakes {} || $ PPID '\; 'を削除してください。私の場合、これは 'find -name '* .cpp' \(-print -a -exec g ++ -c {} \; -o -quit \)'でテストされた '-quit'述語より少し遅いです。 –

関連する問題