Eu mantenho duas cópias da mesma árvore de código fonte: uma é a "cópia de trabalho" e a outra é a "cópia armazenada". Quando termino de editar a "cópia de trabalho", atualizo a "cópia armazenada" com rsync
(somente os arquivos modificados serão copiados e, além disso, os arquivos apagados na cópia de trabalho serão apagados na cópia armazenada também). Há também um SCM, mas ele ocorre mais tarde, após a "cópia armazenada", para que possamos ignorar o SCM aqui.
Mas agora eu quero aplicar um embelezador de código ao fazer a atualização da "cópia de trabalho" para a "armazenada". O embelezador de código pode ser aplicado através do redirecionamento stdin/stdout, mas, AFAIK, rsync
não permite passar por um filtro stdin/stdout ao realizar a cópia.
Quero embelezar apenas os arquivos modificados, porque não quero modificar os carimbos de data e hora dos arquivos inalterados na "cópia armazenada". As regras de embelezamento são diferentes para a "cópia de trabalho" e a "cópia armazenada", então o embelezador não pode ser aplicado à cópia de trabalho.
Como posso fazer isso? Qualquer solução que funcione no UNIX seria aceitável, embora eu prefira scripts de shell Bourne ou programas C. Se rsync
pudesse ser usado de alguma maneira especial para fazer isso, também seria bom.
Dadas as restrições explicadas na pergunta e nos comentários, eu começaria removendo as diferenças entre as diretrizes de estilo usadas para a cópia de trabalho e a cópia armazenada. No entanto, eu entendo que isso pode ser muito difícil, então sinta-se à vontade para ignorar esse conselho.
Eu não acho
rsync
( ou seja , filtrar os arquivos enquanto eles estão sendo copiados) é o lugar certo para tentar aplicar “embelezamento” antes de confirmar a “cópia armazenada”. Se você puder usar o SCM, eu pegaria carona nisso; por exemplo, usandogit
, depois dersync
:será executado
beautifier
em todos os arquivos alterados, assumindo que pode funcionar em arquivos fornecidos como parâmetros.Se você não puder (ou não quiser) usar o SCM, poderá usar os
rsync
logs (consulte as opções--log-file
e--log-file-format
) para descobrir o quersync
copiou e executar o embelezador apenas nesses arquivos.Se
rsync
os logs não puderem ser explorados, ainda há outra maneira de fazer isso: execute o embelezador em cada arquivo na “cópia armazenada”, gerando um arquivo temporário e compare a saída com a original. Se o embelezamento alterar um arquivo, copie a saída de volta sobre o original.