如何获取SrcSrv中包含的svnindex.cmd脚本来索引包含URI转义空格的源文件?

我最近设置了一个符号服务器,并为我们的构建脚本添加了SrcSrv支持,以便我们可以轻松地从字段调试故障转储,并让WinDbg和/或Visual Studio调试器从我们的Subversion存储库中获取正确版本的源文件。用于编译我们的应用程序的任何特定版本崩溃。 我在构建脚本中添加了一行来调用Debugging Tools for Windows软件包附带的stock
svnindex.cmd
脚本,但是发现脚本存储了包含URI转义字符(如空格)的存储库文件路径,因此WinDbg无法下载文件来自存储库。 请注意,
svnindex.cmd
(特别是它开始的
svn.pm
Perl脚本)从
svn info
命令的输出获取源文件的存储库位置,并且
svn
URI-转储存储库路径。当
svnindex.cmd
遇到这个时,它会破坏路径。例如,它将转向路径
"http://mysvnrepo/My%20Application/trunk/Database%20Layer/OracleAdapter.cs"
"http://mysvnrepo/My20Layer/OracleAdapter.cs"
事实证明,SrcSrv将“%”之间的任何内容解释为它在运行时替换的变量名。 假设重命名我们的存储库中的所有目录以删除空格和其他将被URI转义的“特殊”字符是不可行的,我该如何解决这个限制?     
已邀请:
解决此问题的一种快速方法是编辑
svn.pm
运行的Perl脚本,以将源服务器元数据嵌入到PDB文件中。 如果您有WinDbg 6.11.0001.404,则此文件位于Windows调试工具安装目录下的
srcsrv
目录中(例如,在我的机器上,它位于
C:Program FilesDebugging Tools for Windows (x86)srcsrv
)。在旧版本的WinDbg中,此文件低于
sdksrcsrv
。在我的例子中,我在构建服务器上编辑了
svn.pm
的副本,因为构建服务器实际上是调用
svnindex.cmd
。 我的解决方案是在脚本进一步处理之前简单地取消URI转义的文件路径。在
while
循环之后,我将以下行添加到
svn.pm
子程序中,该循环以注释
# Loop on "Path:" entries
开头。我在该循环的右括号之后添加了这些行(我的copy2ѭ副本中的第206行):
    # Fix for Subversion URL's. The "%" character is treated specially by SRCSRV, so
    # we need to remove URI escape sequeneces to get rid of them
    # - Mike Spross (3/30/2011)

    use URI::Escape;
    $FileRepository = uri_unescape($FileRepository);
    $FileRelative = uri_unescape($FileRelative);
这解决了这个问题,并允许我在我的开发机器上提取运行WinDbg的完整源代码。     

要回复问题请先登录注册