debugging 将Subversion存储库编号转换为代码

dauxcl2d  于 2023-08-06  发布在  其他
关注(0)|答案(7)|浏览(110)

我想实现一种在代码中记录项目版本的方法,以便在测试时使用,并帮助跟踪错误。看起来最好的版本号应该是Subversion当前的版本号.有没有一种简单的方法将这个数字挂接到一个(在我的例子中是C++)头文件或其他文件中,然后我可以在代码中得到它?我猜这是一个post commit hook还是什么?
有没有人有任何经验,实现这一点(与代码分享,请?),或者可以提出更好的替代方案?- 谢谢-谢谢

6qftjkof

6qftjkof1#

两种方式:
在代码中嵌入 $Id$$Revision$。然后在文件上设置 svn:keywords=“Id Revision” 属性.这将为您提供该源文件的最后修改版本。适用于较小的项目和脚本。
或者,使用Makefile驱动的进程和命令行工具svnversion.(语言特定-这应该适用于C/C++)

echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h

字符串
或者使用sed和version.h.in编写一些更复杂的构建脚本。然后只需 #include version.h
这会给予你一个仓库版本号,它会随着每次提交/更新而改变,对于大多数项目来说,这可能是一个更合适的版本号。
注意:我还使用了一个人工可读的版本字符串,并手动更新。示例给予:版本:1.0.1-r13445
~J

g2ieeal7

g2ieeal72#

虽然很漂亮,但revision关键字技巧只会在该版本中更改文件时更新文件-如果您不更改文件,那么它将继续反映旧版本。
如果您希望软件始终反映整个修订号,那么您必须深入研究relevant SVN entries file并将其提取出来,这并不太困难(它是一个XML文件)。
Wikipedia在their version page上这样做,以指示正在运行的软件的修订版本; the code is here-查找**getSvnRevision()**方法。

00jrzges

00jrzges3#

你也可以使用TortoiseSVN的SubWCRev。

  • SubWCRev是一个Windows控制台程序,可以用来读取Subversion工作副本的状态,也可以选择在模板文件中执行关键字替换.这通常用作生成过程的一部分,作为将工作副本信息合并到正在生成的对象中的一种方法。通常情况下,它可能用于在“关于”框中包含修订号。

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

qlvxas9a

qlvxas9a4#

在Makefile中,添加:

SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...

字符串
然后你可以在代码中的任何地方使用宏SVN_REV,例如:

printf ("Version: SVN %s\n", SVN_REV);

sh7euo9m

sh7euo9m5#

您可以使用svn:keywords属性来启用Rev关键字。
然后你可以在你的代码中使用$Rev$,当更新到$Rev: 256 $时,SVN会自动扩展它,然后可以解析...
Subversion手册的更多信息

np8igboo

np8igboo6#

一个好的最新解决方案:
创建一个包含以下行的Makefile(与YourFile.dox在同一个文件夹中):

sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox

字符串
YourFile.dox应该包含以下内容:

...
PROJECT_NUMBER         = "Revision RevNumber"
...


现在:

  1. sedsvnversion的输出(在存储库的主文件夹中执行)替换.dox中的RevNumber,并将修改后的文件保存到YourFileDummy.dox
    1.在YourFileDummy.dox上执行doxygen以生成文档
    1.您的文档现在将包含修订号!
xesrikrc

xesrikrc7#

在文件的顶部添加以下内容应该可以达到目的

[Subversion]
Revision = "$Revision: $"
Author   = "$Author:   $"
Date     = "$Date:     $"
HeadURL  = "$HeadURL:  $"

字符串

相关问题