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.

Foi útil?

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 ...

Mais informações sobre o manual do Subversion

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:

  1. sed substitui RevNumber no .dox com a saída de svnversion (executado na pasta principal do seu repositório) e salva o arquivo modificado em YourFileDummy.dox
  2. doxygen é executado em YourFileDummy.dox para gerar a documentação
  3. Sua documentação agora conterá o número de revisão!
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top