Estou trabalhando em um software que cria pacotes Pacman (que basicamente são tarballs com alguns arquivos de metadados especiais). O conjunto de testes cria alguns pacotes e compara o pacote resultante com um resultado esperado registrado.
Um dos campos nos metadados registrados no pacote é o tamanho instalado do pacote, determinado pela execução du -s --apparent-size
no diretório raiz antes de tará-lo.
Tudo isso funciona perfeitamente nas minhas caixas locais do Arch Linux onde desenvolvo. Os pacotes, incluindo o tamanho instalado em bytes (nem kilobytes, bytes!), São reproduzidos exatamente toda vez que eu executo o teste.
Agora também habilitei esse teste no Travis, onde ele é executado (pelo que entendi nos documentos do Travis) em um contêiner baseado no Ubuntu 12.04. Lá, o teste passa na maioria das vezes. Na maioria das vezes. Às vezes, calcula os tamanhos instalados que estão desativados em 80-99%.
Aqui está um exemplo de teste que falha: https://travis-ci.org/holocm/holo/builds/89326780 (o teste logo antes do êxito). Uma das diferenças relevantes é
@@ -37,7 +37,7 @@
pkgdesc = my foo bar package
url =
packager = Unknown Packager
- size = 37728
+ size = 1464
arch = any
license = custom:none
replaces = foo-bar<2.1
O mais intrigante disso é que isso acontece apenas algumas vezes, sem padrão aparente. O teste organiza os mesmos arquivos de sempre, é executado du -s --apparent-size
na árvore resultante e chega a um resultado completamente errado. Eu tentei reproduzir isso em uma VM do Ubuntu 12.04 e, embora eu tenha visto ele aparecer lá uma ou duas vezes, também não pude ver nenhum padrão surgindo lá que me ajudasse a reproduzir o problema.
Talvez alguém aqui tenha uma idéia do que poderia causar esse problema?
EDIT: Oh, há um padrão que eu observei, na verdade. du
é executado uma vez para cada caso de teste. Quando falhar no primeiro caso de teste, falhará em todos os casos de teste nesta execução.
fonte
Respostas:
Bem, fui solicitado a colocar isso como resposta por @derobert
fonte