2012-08-06 14 views
6

Sto provando a integrare il controllo del mio codice utilizzando pyflakes in un processo di costruzione. Ho definito il seguente obiettivo nel mio Makefile:Interrompi make se find -exec non restituisce zero

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

Il problema è che i rendimenti find0 ogni volta, anche se ci sono problemi di codice (pyflakes rendimenti non 0) e make riesce. Idealmente, voglio eseguire il controllo su ogni file sorgente e interrompere make se almeno uno di -exec non è riuscito. C'è un modo per ottenere questo?

risposta

4

Suppongo che non sia possibile eseguire il codice di uscita find-exec.
Che dovrebbe funzionare è tubazioni per xargs:

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

Si può solo pipe l'output di trovare per il proprio ciclo di elaborazione e uscire quando pyflakes restituisce un exit status diverso da 0.

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

'cmd; se [$? -ne 0]; allora pippo; fi' è solo un antipattern; il modo corretto di codificare è 'if cmd; allora pippo; fi' o semplicemente 'cmd || foo'. – tripleee

+0

pensato per scrivere questo. vedi la versione modificata. –

+0

Non vedo alcun miglioramento. La modifica che vuoi è 'pyflakes" $ line "|| exit $? ', breve e semplice. – tripleee

1

Marchio a finire il processo di ritrovamento da

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

Questo è ciò che va in makefile, non è un file di script, se vi chiedete abou t la sintassi.

+0

Basta scrivere '-exec bash -c 'pyflakes {} || kill $ PPID '\; '. Per me questo funziona un po 'più lentamente del predicato '-quit', testato con:' find -name' * .cpp '\ (-print -a -exec g ++ -c {} \; -o -quit \) '. –

Problemi correlati