Skip to main content
Um release contém cerca de 187.000 módulos. Aproximadamente 11% deles têm alguma relação com o protocolo do WhatsApp. O resto são botões, ícones, analytics e código do Facebook e do Instagram, que dividem o mesmo bundle. Sem filtro, comparar dois releases gera dezenas de milhares de entradas. Os filtros são o que deixa o resultado legível.

Filtros embutidos

A diferença não é sutil. Buscar Passkey sem filtro devolve 193 módulos, quase todos telas de login empresarial do Facebook. Com --filter protocol devolve 12, que são o recurso inteiro.
O default pula de propósito arquivos .pb e .graphql. Eles são gerados, e comparar o texto deles é ruído. Se você está caçando um campo protobuf novo, use --filter schemas, senão vai concluir que nada mudou.

Confira antes de confiar

Todo módulo descartado informa por que foi descartado, então um resultado inesperadamente vazio é explicável em vez de misterioso.

Criando o seu

Filtros embutidos são somente leitura. Copie um e edite a cópia.
Um filtro é JSON, e um documento parcial é tratado como edição, então você só envia os campos que quer mudar.
Apagar um filtro que sobrepõe um embutido restaura o embutido.

Como o casamento funciona

Quatro listas de expressões regulares, verificadas em ordem. A primeira que casar vence.
1

hardExclude

Descartado de qualquer jeito, mesmo que a lista de inclusão também case. Existe para tipos de arquivo que se tratam melhor por outros meios, como schemas .pb.
2

include

Mantido, sobrepondo a lista de exclusão. O WAWebSendMessageAction casa com a exclusão genérica de “termina em Action”, mas é exatamente o que você quer, então a lista de inclusão o resgata.
3

exclude

Descartado.
4

defaultVerdict

O que acontece com o que nenhuma lista casou. keep faz uma lista de bloqueio, que é o que o default é. drop faz uma lista de permissão, que é o que o protocol é.
Com excludeDependentsOfExcluded, tudo que depende de um módulo descartado também é descartado, seguindo a cadeia até o fim. Módulos casados por include ficam isentos, já que você pediu por eles explicitamente. Mais duas listas ajustam a comparação em vez da seleção:
  • noiseDeps lista dependências cuja entrada e saída não diz nada, então elas ficam fora das mudanças de dependência relatadas.
  • noiseCode lista padrões de saída de compilador, então um módulo cuja mudança inteira é ruído de build é contado como ruído em vez de relatado.
As regras do filtro default vêm do wa-diff-analyzer do ProtoCocktail, construídas à mão contra bundles reais ao longo de muito tempo. Elas carregam um bocado de conhecimento acumulado sobre qual nome de módulo significa o quê.