Как да накарам скрипта 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, не е осъществимо, как да заобиколя това ограничение?


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


Отговори (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 на моята машина за разработка.

person Mike Spross    schedule 31.03.2011