git log -G<regex> -p
é uma ferramenta maravilhosa para pesquisar no histórico de uma base de código alterações que correspondam ao padrão especificado. No entanto, pode ser esmagador localizar o pedaço relevante na saída do diff / patch em um mar de pedaços principalmente irrelevantes.
É claro que é possível pesquisar a saída da git log
string / regex original, mas isso faz pouco para reduzir o ruído visual e a distração de muitas alterações não relacionadas.
Continuando lendo git log
, vejo --pickaxe-all
que há exatamente o oposto do que eu quero: ele amplia a saída (para todo o conjunto de alterações), enquanto eu quero limitá-lo (para o pedaço específico).
Essencialmente, estou procurando uma maneira de "inteligentemente" analisar o diff / patch em pedaços individuais e, em seguida, executar uma pesquisa em cada pedaço (visando apenas as linhas alteradas), descartar os pedaços que não coincidem e produzir os mesmos isso faz.
Existe uma ferramenta como eu descrevo? Existe uma abordagem melhor para obter os pedaços correspondentes / afetados?
Algumas pesquisas iniciais que fiz ...
Se fosse possível obter
grep
a saída diff / patch e tornar dinâmicos os valores das opções de contexto - digamos, através de regexps em vez de contagens de linha -, isso seria suficiente. Masgrep
não é exatamente construído dessa maneira (nem estou necessariamente solicitando esse recurso).Encontrei a suíte patchutils , que inicialmente parecia ser adequada às minhas necessidades. Mas depois de ler suas
man
páginas, as ferramentas não parecem lidar com pedaços correspondentes com base em regexps. (Eles podem aceitar uma lista de pedaços, no entanto ...)Finalmente encontrei o splitpatch.rb , que parece lidar bem com a análise do patch, mas seria necessário aumentar significativamente para lidar com a leitura dos patches
stdin
, a correspondência entre os blocos desejados e a saída dos blocos.