Git changelog agrupado por dia e usuário

3

Código atual para gerar registros de alterações:

svn2cl --linelen 78 --reparagraph --include-rev --group-by-day

O mais próximo que consegui das opções de baunilha é

git shortlog --format='* [%h] %s' -w78,8,10

Como emular a saída svn2cl da melhor forma possível?

Exemplo de saída:

2013-02-19  username

        * [r30695] path1: commit message
        * [r30691] path2, path3, path4: looooooooooooooooooooooooooooong
          commit message
        * [r30690] path1, path3: commit message

2013-02-19  other_user
        * ...

2013-02-18  username
        * ...

Duas questões permanecem:

  • Inclua uma lista de caminhos legível por humanos antes da mensagem de confirmação
  • Mensagens longas de confirmação de impressão bonita
por l0b0 19.02.2013 / 17:27

2 respostas

2

Outra solução deu a direção certa. O resultado até agora:

#!/usr/bin/env bash
while read -r -u 9 date name
do
    echo "$date  $name"
    echo
    GIT_PAGER=cat git log --no-merges --committer="$name" --since="$date 00:00:00 +0000" --until="$(date --date="$date + 1 day" +%Y-%m-%d) 00:00:00 +0000" --format='        * [%h] %s'
    echo
done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)

Os tempos da meia-noite eram necessários. Parece que, por algum motivo, ele usa a hora atual em vez do início do dia por padrão.

Duas questões permanecem:

  • Inclua uma lista de caminhos legível por humanos antes da mensagem de confirmação
  • Mensagens longas de confirmação de impressão bonita

Exemplo de saída:

2013-02-19  username

        * [f97bb5f] commit message
        * [f0e419d] looooooooooooooooooooooooooooong commit message
        * [070e50f] commit message

2013-02-19  other_user
        * ...

2013-02-18  username
        * ...
    
por 19.02.2013 / 17:27
1

Para fazer isso funcionar no OS X, fiz algumas pequenas modificações na solução do l0b0:

git-grouped-log () {
  while read -r -u 9 since name
  do
    until=$(date -j -v+1d -f '%Y-%m-%d' $since +%Y-%m-%d)

    echo "$since $name"
    echo

    GIT_PAGER=cat git log             \
      --no-merges                     \
      --committer="$name"             \
      --since="$since 00:00:00 +0000" \
      --until="$until 00:00:00 +0000" \
      --format='  * [%h] %s'

    echo
  done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)
}

Também o envolvi em uma função, porque posso salvá-lo em um arquivo arbitrário.

    
por 11.07.2014 / 11:01

Tags