Colocando o número do repositório do Subversion no código
Pergunta
Eu gostaria de implementar uma maneira de registrar a versão de um projeto dentro do código, para que possa ser usado em testes e para ajudar a rastrear bugs.Parece que o melhor número de versão a ser usado seria apenas o número de revisão atual do Subversion.Existe uma maneira fácil de conectar esse número a um arquivo de cabeçalho (C++ no meu caso) ou algo assim, que eu possa acessar no código?Eu acho que isso é um gancho de pós-commit ou algo assim?
Alguém tem alguma experiência em implementar isso (com código para compartilhar, por favor?) Ou pode sugerir uma alternativa melhor?Obrigado.
Solução
Embora bacana, o truque da palavra-chave de revisão apenas atualiza o arquivo quando ele é alterado nessa revisão - se você não alterar o arquivo, ele continuará refletindo a revisão antiga.
Se você deseja que o software sempre reflita o número geral da revisão, você terá que se aprofundar no arquivo de entradas SVN relevante e extraí-lo, o que não é muito difícil (é um arquivo XML).
A Wikipédia faz isso em sua página de versão para indicar a revisão do software que está rodando ao vivo; o código está aqui - procure o getSvnRevision() método.
Outras dicas
Dois caminhos:
Embutir $Id$ ou $Revisão$ dentro do código.Então defina svn:keywords="Revisão de ID" propriedade no arquivo.Isto lhe dará a última revisão modificada desse arquivo de origem.Bom para projetos e scripts menores.
Alternativamente, use um processo orientado por Makefile e a ferramenta de linha de comando svnversion.(Específico do idioma - isso deve funcionar para C/C++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
Ou algum script de construção mais complexo com sed e version.h.in.Então é só #incluir versão.h
Isso lhe dará o número da versão do repositório, que mudará a cada commit/atualização, e é provavelmente um número de versão mais apropriado para a maioria dos projetos.
Observação:Também usei uma string de versão legível por humanos que atualizo manualmente.O exemplo daria: Versão:1.0.1-r13445
~J
Você também pode usar o SubWCRev que faz parte do TortoiseSVN.
SubWCRev é um programa de console do Windows que pode ser usado para ler o status de uma cópia de trabalho do Subversion e, opcionalmente, realizar a substituição de palavras-chave em um arquivo de modelo.Isso geralmente é usado como parte do processo de construção como um meio de incorporar informações da cópia de trabalho no objeto que você está construindo.Normalmente pode ser usado para incluir o número da revisão na caixa “Sobre”.
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
no seu Makefile, adicione:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
então você pode usar macro SVN_REV
em qualquer lugar do seu código, por exemplo:
printf ("Version: SVN %s\n", SVN_REV);
Você pode usar o svn:keywords
propriedade para permitir o Rev
palavra-chave.
Você pode então usar $Rev$
no seu código e o SVN irá expandi-lo automaticamente ao atualizar para $Rev: 256 $
que pode então analisar ...
Uma boa solução atualizada:
Criar uma Makefile
contendo a seguinte linha (na mesma pasta que YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
E YourFile.dox
deve conter isto:
...
PROJECT_NUMBER = "Revision RevNumber"
...
Agora:
sed
substituiRevNumber
no .dox com a saída desvnversion
(executado na pasta principal do seu repositório) e salva o arquivo modificado emYourFileDummy.dox
doxygen
é executado emYourFileDummy.dox
para gerar a documentação- Sua documentação agora conterá o número de revisão!