Как заставить скрипт svnindex.cmd, включенный в SrcSrv, индексировать исходные файлы с пробелами, экранированными URI?

Недавно я настроил сервер символов и добавил SrcSrv поддержку наших скриптов сборки, чтобы мы могли легко отлаживать аварийные дампы с места, а WinDbg и/или отладчик Visual Studio получали правильную версию исходных файлов из нашего репозитория Subversion, которые использовались для компиляции любой конкретной версии наше приложение зависло.

Я добавил строку в наш скрипт сборки, чтобы вызвать стандартный скрипт svnindex.cmd, который поставляется с пакетом средств отладки для Windows, но обнаружил, что скрипт искажает пути к файлам репозитория, которые содержат экранированные символы URI, такие как пробелы, поэтому WinDbg не может загружать файлы из репозитория.

Обратите внимание, что svnindex.cmd (в частности, Perl-скрипт svn.pm, который он запускает) получает расположение репозитория для исходных файлов из вывода команды svn info, а svn URI-экранирует пути к репозиторию. Когда svnindex.cmd сталкивается с этим, он искажает путь. Например, он превратит путь

"http://mysvnrepo/My%20Application/trunk/Database%20Layer/OracleAdapter.cs"

в

"http://mysvnrepo/My20Layer/OracleAdapter.cs"

Оказывается, SrcSrv интерпретирует все, что находится между «%», как имя переменной, которое он заменяет во время выполнения.

Предполагая, что переименование всех каталогов в нашем репозитории для удаления пробелов и других «специальных» символов, которые будут экранированы URI, невозможно, как мне обойти это ограничение?


person Mike Spross    schedule 31.03.2011    source источник


Ответы (1)


Быстрый способ решить эту проблему — отредактировать svn.pm скрипт Perl, который svnindex.cmd запускает, чтобы встроить метаданные исходного сервера в ваши PDB-файлы.

Если у вас WinDbg 6.11.0001.404, этот файл находится в каталоге srcsrv каталога установки Debugging Tools for 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, на моем компьютере для разработки.

person Mike Spross    schedule 31.03.2011