Insira a data e o nome da tag nos arquivos de origem do LaTeX com o git

2

Estou usando o git para escrever alguns pacotes LaTeX. Para poder usar os recursos de versão do LaTeX, uma sequência do seguinte formato precisa ser incluída em cada pacote:

\ProvidesPackage{MyPackageName}[yyyy/mm/dd VersionNumber SomeText]

Geralmente esqueço de atualizar a data e o número da versão antes de carregar os arquivos no CTAN e fiquei pensando se o git pode ser usado para automatizar isso.

Estou procurando um método para:

  1. insira automaticamente a data atual no código-fonte em cada confirmação, apenas para os arquivos alterados nesta confirmação

  2. insira automaticamente a data e o número da versão atuais em todos os arquivos quando eu codifico uma versão (o nome da marca é igual ao número da versão)

sozinho
fonte

Respostas:

1

Para fazer coisas automaticamente git, use ganchos

Você quer fazer \thing{}com cada commit do git? É para isso que serve um gancho . Por exemplo, o post-commitgancho:

Depois que todo o processo de consolidação é concluído, o gancho pós-consolidação é executado. Não requer nenhum parâmetro, mas você pode facilmente obter o último commit executando git log -1 HEAD. Geralmente, esse script é usado para notificação ou algo semelhante.

no site / manual do GIT SCM

Adicionando uma data a cada git commit

Esta é a parte direta. Você pode usar esse gancho para alcançar a primeira parte de seus dois objetivos de maneira simples:

  1. use git diff-tree --no-commit-id --name-only -r HEADpara alterar os arquivos na revisão atual (consulte esta explicação no SO )
  2. itere sobre esses arquivos no idioma de sua escolha e use a ferramenta de sua escolha para inserir a data, por exemplo, com sedouawk

Se você fizer isso localmente, ele deixará os arquivos não estágios alterados em sua cópia de trabalho; ou seja git status, mostrará os arquivos alterados . Você pode evitar isso usando um repo adicional como abaixo.

Adicionando uma versão a cada git tag

Isso é um pouco mais complicado.

Você pode contornar o fato de que git tagnão aciona nenhum gancho usando um repositório intermediário git - local ou remoto - e git pushpara esse repositório toda vez que você marcar. Você pode usar um post-updategancho nesse servidor para reescrever com base na tag mais recente.

Por exemplo:

  1. Obtenha o nome da tag / versão mais recente: git describe --tags $(git rev-list --tags --max-count=1)
  2. Formate os arquivos usando sed( awkou qualquer ferramenta que você escolher)
  3. Faça o upload para o CTAN a partir desse diretório

Não posso fazer isso com outro gancho?

Ele é possível detectar se um ref tem uma tag usando git describe, por exemplo:

# In a working git repo
$ git tag -a "test1" -m "test tag"
$ git describe --exact-match HEAD
test1
$ git describe --exact-match HEAD^1
fatal: no tag exactly matches 'f8a1d888151809ccfbb3460bbcf310541967e292'
128

No entanto, o uso git tagnão ativará um commitgancho.

bertieb
fonte
Resposta fantástica com muito boa explicação! Muito obrigado!
Sozinho # prisma