2012-08-06 7 views
6

Estoy tratando de integrar la comprobación de mi código usando pyflakes en un proceso de construcción. He definido el siguiente objetivo en mi Makefile:Detener make si find -exec devuelve no cero

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

El problema es que find vuelve cada vez 0 incluso si hay problemas de código (pyflakes devoluciones no 0) y make tiene éxito. Idealmente, quiero ejecutar la verificación en cada archivo fuente y detener make si al menos uno de -exec falló. ¿Hay una manera de lograr esto?

Respuesta

4

Supongo que no hay forma de hacer find código de salida de retorno de -exec.
Lo que debería trabajar esté bien a xargs:

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

Usted puede simplemente canalizar la salida de encontrar a su propio bucle de procesamiento y salida cuando pyflakes devuelve un código de salida distinto de 0.

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

'cmd; si [$? -ne 0]; entonces foo; fi' es solo un antipatón; la forma correcta de codificar es 'si cmd; entonces foo; fi' o simplemente 'cmd || foo'. – tripleee

+0

destinado a escribir esto. ver la versión editada. –

+0

No veo ninguna mejora. La edición que desea es 'pyflakes '$ line' '|| salir $? ', corto y simple. – tripleee

1

Hacer se termina el proceso de descubrimiento por

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

Esto es lo que pasa en el makefile, no es un archivo de script, si usted se pregunta Abou t la sintaxis

+0

Basta con escribir '-exec bash -c 'pyflakes {} || kill $ PPID '\; '. Para mí, esto funciona un poco más lento que el predicado '-quit', probado con:' find -name '* .cpp' \ (-print -a -exec g ++ -c {} \; -o -quit \) '. –

Cuestiones relacionadas