Как получить сценарий svnindex.cmd, включенный в SrcSrv, для индексирования исходных файлов с пробелами, экранированными URI? - PullRequest
0 голосов
/ 31 марта 2011

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

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

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

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

в

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

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

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

1 Ответ

0 голосов
/ 31 марта 2011

Быстрый способ решить эту проблему - отредактировать Perl-скрипт svn.pm, который запускается 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 на моей машине для разработки.

...