Eu desenvolvo na F24 e meus testes passam, mas quando eu os experimento no Travis CI, eles falham. AFAIK, eles (Travis CI) usam o Ubuntu 12.04 VMs. O teste compara a saída de uma execução com a saída "gold" coletada anteriormente e sinaliza quaisquer diferenças como falhas.
Neste caso em particular, a diferença surge porque um comando cp
é chamado em um arquivo inexistente que produz uma mensagem de erro, mas a mensagem de erro é ligeiramente diferente entre os dois sistemas. No Fedora 24, eu recebo:
$ cp foo bar
cp: cannot stat 'foo': No such file or directory
Em uma VM Ubuntu 12.04 (configurada para simular o ambiente Travis CI), recebo:
$ cp foo bar
cp: cannot stat 'foo': No such file or directory
N.B. o backtick na saída do Ubuntu, em oposição à cota única na saída do F24.
Eu tentei export LC_ALL=C
, mas isso não faz nada para nenhuma saída. O F24 tem a versão 8.25 do coreutils (que contém as infames alterações de nome de arquivo citadas na saída ls, mas isso não tem nada a ver com o meu problema). O Ubuntu 12.04 possui a versão 8.13.
Minhas perguntas:
1) Esta é uma mudança nos coreutils entre 8.13 e 8.25? Ou o Fedora e o Ubuntu compilaram os coreutils de alguma forma?
2) As versões mais recentes do Ubuntu usam um backtick nesta (e presumivelmente em outras) mensagens de erro?
3) Existe alguma maneira de definir as cotações que são usadas em mensagens de erro? Em qualquer sistema?
4) Eu provavelmente vou aumentar a saída do comando e alterar qualquer backticks para aspas simples antes de comparar com a saída "gold". Alguma sugestão para um método melhor?
EDIT: Fui informado que posso executar uma versão mais recente do Ubuntu no ambiente do Travis CI (adicione "dist: trusty" a .travis.yml
). Essa versão (16.04) usa aspas simples Unicode (codepoint # x2018) no ambiente en_US.UTF-8 para aspas de abertura e fechamento na mensagem de erro; ele usa apóstrofos ASCII na localidade C - isso é bom o suficiente para meus propósitos.