Use a saída do pacote gitinfo2 com comandos datetime2

Use a saída do pacote gitinfo2 com comandos datetime2

O gitinfo2pacote fornece o comando \gitAuthorDateque retorna a data do commit atual no formato ISO, por exemplo, 2018-02-22.

Gostaria de usar esta data com um formato diferente no meu documento, então tentei usar o datetime2pacote para salvar a saída \gitAuthorDatee reformatá-la.

Aqui está um exemplo mínimo (para ser usado em um diretório com versão git com os ganchos apropriados instalados conforme a documentação de gitinfo2:

\documentclass{article}

\usepackage[grumpy,mark]{gitinfo2}

\usepackage[calc]{datetime2}
\DTMsavedate{commitdate}{\gitAuthorDate}

\begin{document}

Hello world!

\end{document}

Infelizmente, isso me dá

Runaway argument?
\gitInf@authsdate \@dtm@endparsedate \cslet {@dtm@commitdate@year}{\@dtm@year \
ETC.
! Paragraph ended before \@dtm@parsedate was complete.
<to be read again> 
                   \par 
l.9 

Como posso corrigir esse erro ou existe outra maneira de reformatar a data fornecida por \gitAuthorDate?

Editar

Conforme solicitado por Nicola, aqui está um trecho de uma sessão interativa para ver como \gitAuthorDate se expande

*\show\gitAuthorDate
...
> \gitAuthorDate=\long macro:
->\gitInf@authsdate .
*\makeatletter
*\show\gitInf@authsdate
> \gitInf@authsdate=macro:
->2018-02-22.

Responder1

(Transformando comentários em uma resposta.) \DTMsavedateexecuta uma expansão de um nível no primeiro token no segundo argumento, então funcionaria se, digamos, \gitAuthorDatefosse definido diretamente como 22/02/2018, mas não se fosse definido de uma maneira mais complicada . Dada a expansão \gitAuthorDatefornecida, você poderia usar a solução proposta:

\makeatletter\DTMsavedate{commitdate}{\gitInf@authsdate}\makeatother

No entanto, é melhor não usar comandos internos caso o pacote os altere em versões posteriores. Em vez disso, uma solução mais geral é garantir que o argumento seja totalmente expandido antes de ser passado para \DTMsavedate:

\newcommand{\esavedate}[2]{%
  \begingroup
  \edef\x{\noexpand\endgroup\noexpand\DTMsavedate{#1}{#2}}\x
}

\esavedate{commitdate}{\gitAuthorDate}

informação relacionada