Open fjuniorr opened 11 months ago
TLDR: No momento somente criar o data.lock que vai versionar (guardar histórico) dos MD5 e SHA256 dos arquivos dos datapackages instalados.
Para funcionar no windows tive de baixar a versão pré-compilada md5deep-4.4.zip disponível em: https://github.com/jessek/hashdeep/releases
Parece que o hashdeep pode alterar a ordem dos arquivos de uma execução pra outra, o que é um problema para o git
Ps. De fato não existe garantia de ordem (per https://github.com/jessek/hashdeep/issues/314). Podemos ordenar depois de capturar o output via Python para remover as linhas de comentário.
Um dos motivos que eu gostaria de usar o hashdeep é que ele possui um audit mode que permite a verificação se houve qualquer alteração nos arquivos:
Audit mode. Each input file is compared against the set of knowns. An audit is said to pass if each input file is matched against exactly one file in set of knowns. Any collisions, new files, or missing files will make the audit fail. Using this flag alone produces a message, either "Audit passed" or "Audit Failed".
Isso seria útil para identificar divergências entre a nossa manifest file data.toml
e a nossa lockile data.lock
. No entanto, como primeira aproximação podemos simplesmente coletar as hashes que já estão presentes no datapackage.json
.
Se possível seria interessante coletar também a hash do commit do repositório git[^1] origem dos dados para permitir uma completa reprodutibilidade via dpm install data.lock
.
[^1]: O ideal seria que essa informação fosse armazenada no próprio datapackage.json
, conforme discutido em https://github.com/splor-mg/ppag-planejamento-dados/issues/14, mas como o arquivo datapackage.json
está sendo versionado isso não é possível.
O nome data.lock
é apenas para seguir a convenção de outras ferramentas, em termos de formato do arquivo podemos usar JSON com estrutura a ser definida durante a implementação.
Não é exatamente a mesma coisa mas inclui no projeto acordo-judicial-reparacao-vale somente os arquivos datapackage.json
da pasta datapackages/
usando um padrão especial no .gitignore e de certa forma isso diminui a prioridade desse issue.
Eu fiz isso porque o Comitê Pró-Brumadinho perguntou "Uma dúvida que surgiu aqui... Dados do relatório vão até qual data?" e o @hslinhares não seria capaz de responder a essa pergunta porque os dados estão somente na minha máquina. Com os datapackages/**/datapackage.json
ele consegue.
O escopo desse issue é começar com uma versão simplificada em que o
dpm install
gera um arquivodata.lock
da pastadatapackages/
usando hashdeep (as linhas de comentário devem ser excluídas antes do arquivo ser salvo):Com o arquivo
data.lock
versionado, a gente vai ser capaz de visualizar quais arquivos foram alterados em uma dada execução dodpm install
. Isso evita problemas como aquele relatado em #22.Com isso o
dpm
vai passar a ter uma nova dependência de sistema, hashdeep. Faz parte do escopo pesquisar como incorporar isso no pacote da forma adequada.