Portanto, como o GitHub removeu a guia de insights para contas não premium, estou tentando listar localmente inserções e exclusões em meu repositório git por dia.
Eu descobri esta maneira de imprimir o que quero:
git log --pretty="@%ad" --date=short --shortstat | tr "\n" " " | tr "@" "\n"
Isso produz este tipo de saída:
2024-06-13 7 files changed, 400 insertions(+), 406 deletions(-)
2024-06-12 3 files changed, 145 insertions(+)
2024-06-12 5 files changed, 638 deletions(-)
2024-06-12 1 file changed, 1 insertion(+), 1 deletion(-)
Observe os plurais em arquivo(s), inserção(ões) e exclusão(ões). Outro problema é que um commit pode não ter inserções ou exclusões (ou ambas, mas vamos ignorar este caso).
Então estou quase lá, só preciso extrair a data, inserções e exclusões e agrupar por data. Isso produzirá algum tipo de gráfico de “trabalho realizado por dia”.
Fiz esse regex para capturar os campos que tratam de todos os opcionais:
/^([0-9]{4}-[0-9]{2}-[0-9]{2})\s{3}[0-9]+\sfile(s)?\schanged,\s(([0-9]+)\sinsertion(s)?\(\+\))?(,\s)?(([0-9]+)\sdeletion(s)?\(\-\))?\s$/gm
Agora preciso obter o 1º, 4º e 8º grupos, por exemplo com sed
:
echo "2024-06-13 7 files changed, 400 insertions(+), 406 deletions(-) " |
sed -r 's/^([0-9]{4}-[0-9]{2}-[0-9]{2})\s{3}[0-9]+\sfile(s)?\schanged,\s(([0-9]+)\sinsertion(s)?\(\+\))?(,\s)?(([0-9]+)\sdeletion(s)?\(\-\))?\s$/\1 \4 \8/gm'
Isso produz a saída correta:
2024-06-13 400 406
Mas se a string de entrada não tiver inserções ou exclusões, sed simplesmente não imprimirá nada para esse grupo capturado. Ex.:
2024-06-13 400
E não tenho como saber se o número único são inserções ou exclusões.
Existe alguma maneira de extrair os grupos de cada linha, mas imprimir um "0" como espaço reservado se o grupo não existir? (não necessariamente apenas com sed e não necessariamente em um único comando).