Как мне получить скрипт svnindex.cmd, включенный в SrcSrv, для индексирования исходных файлов с пробелами, экранированными URI?
Недавно я настроил сервер символов и добавил поддержку SrcSrv в наши сценарии сборки, чтобы мы могли легко отлаживать аварийные дампы с поля и иметь отладчик WinDbg и / или Visual Studio, получающий правильную версию исходных файлов из нашего хранилища Subversion, которые были используется для компиляции любой конкретной версии нашего приложения, потерпевшего крах.
Я добавил строку в наш скрипт сборки, чтобы вызвать запас svnindex.cmd
Сценарий, который поставляется с пакетом средств отладки для Windows, но обнаружил, что сценарий искажает пути к файлам репозитория, которые содержат экранированные 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, невозможно, как мне обойти это ограничение?
1 ответ
Быстрый способ решить эту проблему - отредактировать svn.pm
Скрипт Perl, который svnindex.cmd
работает для встраивания метаданных исходного сервера в ваши файлы PDB.
Если у вас WinDbg 6.11.0001.404, этот файл находится в srcsrv
каталог в каталоге установки средств отладки для Windows (например, на моем компьютере он находится в C:\Program Files\Debugging Tools for Windows (x86)\srcsrv
). В старых версиях WinDbg этот файл находится под sdk\srcsrv
, В моем случае я отредактировал копию svn.pm
на нашем сервере сборки, так как сервер сборки это то, что на самом деле вызывает svnindex.cmd
,
Мое решение состояло в том, чтобы просто удалить экранированные URI пути к файлам, прежде чем они будут обработаны сценарием. Я добавил следующие строки в GatherFileInformation
подпрограмма в svn.pm
, после while
цикл, который начинается с комментария # Loop on "Path:" entries
, Я добавил эти строки после закрывающей скобки для этого цикла (строка 206 в моей копии svn.pm
):
# 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 на моей машине для разработки.