Eu quero testar se o arquivo contém um padrão (testes de jasmim ignorados que devem fazer minha compilação falhar, quando executados no travis).
Eu tenho um código assim:
skipped_tests:
$(if $(shell grep -E 'iit|ddescribe' spec/terminalSpec.js), @false, @true)
o problema é que não recebo saída de grep
, quando ele encontra as linhas que correspondem ao padrão. Eu quero isso para que eu possa ver qual linha causou o problema no travis build log. Existe uma maneira de reverter um código de erro de comando (retornar 0 quando não 0 for retornado e vice-versa)?
Eu também tentei isso:
skipped_tests:
grep -E 'iit|ddescribe' spec/terminalSpec.js
@test $$? -eq 0 # should it be -ne
mas isso ecoa uma linha que tem iit
e não falha e, se não encontrar a linha, falhará no grep.
Que tal agora?
Resolvi o problema chamando grep duas vezes
Existe uma maneira melhor?
Eu tentei algumas outras coisas, mas parece que o make está operando em strings (use str.replace no Makefile ou algo assim) porque se a saída do grep for a linha do código-fonte, ele dará um erro de sintaxe de outras soluções possíveis.
Solução possível:
Defina a variável no topo
Makefile
e useifeq
. Por exemplo:Mas
grep
será executado em cada chamada demake
, mesmo que skipped_tests não esteja chamando. Se esse alvo for chamado todas as vezes, também é uma solução.Considerando seus desejos. Se você deseja usar o
grep
resultado no destino várias vezes, pode usar a expressão de várias linhas. Suponha que eu tenha a seguirMakefile
:e eu tenho o próximo
test.js
no mesmo diretório:Se o padrão não corresponder, haverá o próximo resultado:
Se o padrão existir, haverá o próximo resultado:
Para facilitar a leitura, você pode alterar
``
comres=$$(grep -E ...) || ...
.Claro que não é muito conveniente fazer comandos multilinha em uma chamada para o sistema (essa multilinha é uma sessão do interpretador), mas às vezes pode ser útil nos casos em que você precisa operar uma variável (variável de ambiente também).