2012-08-06 11 views
6

Próbuję zintegrować sprawdzanie mojego kodu przy użyciu pyflakes w procesie budowy. Mam zdefiniowane następujące cel w moim Makefile:Zatrzymaj make jeśli find -exec zwraca zero zero

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

Problemem jest to, że find powraca 0 za każdym razem, nawet jeśli istnieją problemy kod (pyflakes zyski nie 0) i make powiedzie. Idealnie, chcę uruchomić sprawdzanie każdego pliku źródłowego i zatrzymać make, jeśli nie powiodło się co najmniej jedno z -exec. Czy istnieje sposób, aby to osiągnąć?

Odpowiedz

4

Zakładam, że nie ma sposobu, aby uzyskać kod powrotu find z -exec.
Co powinien pracować jest potokiem do xargs:

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

można po prostu rura wyjście znaleźć na swój pętli przetwarzania i wyjścia kiedy pyflakes zwraca status wyjścia innego niż 0.

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

'cmd; jeśli [$? -ne 0]; następnie foo; fi jest tylko antipattern; właściwy sposób kodowania to "if cmd; następnie foo; fi' lub po prostu 'cmd || foo'. – tripleee

+0

przeznaczone do napisania tego. zobacz edytowaną wersję. –

+0

Nie widzę żadnej poprawy. Wymagana edycja to 'pyflakes" $ line "|| exit $? ', krótkie i proste. – tripleee

1

Marka to zakończyć proces znajdowania przez

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

to, co dzieje się w makefile, że nie jest to skrypt, jeśli zastanawiasz się Abou t składnia.

+0

Wystarczy napisać '-exec bash -c 'pyflakes {} || kill $ PPID '\; '. Dla mnie działa to nieco wolniej niż predykat '-quit', testowany za pomocą:' find -name '* .cpp' \ (-print -a -exec g ++ -c {} \; -o -quit \) '. –

Powiązane problemy