Как заставить CruiseControl.NET работать с Mercurial: «Сбой контроля исходного кода (GetModification)» - PullRequest
7 голосов
/ 03 декабря 2010

Я пытаюсь настроить CruiseControl.NET 1.5.7256.1 для автоматической сборки.Мой проект хранится в Mercurial, и я использую следующее ccnet.config:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
    <project name="Slider" webURL="http://localhost/ccnet">
        <triggers>
            <intervalTrigger seconds="3600" />
        </triggers>
        <sourcecontrol type="hg" autoGetSource="true">
            <executable>C:\Python26\Scripts\hg.bat</executable>
            <repo>c:\repos\slider</repo>
            <workingDirectory>c:\ccnet\slider</workingDirectory>
        </sourcecontrol>
        <tasks>
            <msbuild>
                <executable>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe</executable>
                <workingDirectory>c:\ccnet\slider</workingDirectory>
                <projectFile>Slider.sln</projectFile>
                <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
                <targets>Slider</targets>
                <timeout>900</timeout>
                <logger>C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
            </msbuild>
        </tasks>
    </project>
</cruisecontrol>

Но когда я форсирую сборку, я получаю эту ошибку:

[Slider:WARN] Source control failure (GetModifications): Source control operation failed: < was unexpected at this time.
. Process command: C:\Python26\Scripts\hg.bat log -r 0:123 --template <modification><node>{node|short}</node><author>{author|user}</author><date>{date|rfc822date}</date><desc>{desc|escape}</desc><rev>{rev}</rev><email>{author|email|obfuscate}</email><files>{files}</files></modification> --noninteractive
[Slider:INFO] Integration complete: Exception - 12/2/2010 1:19:08 PM

Ошибкапредположительно вызвано не заключенными в кавычки угловыми скобками в параметре --template, но как я могу заставить CC.NET заключать в кавычки этот параметр?

======================

Вот hg.bat:

@echo off
rem Windows Driver script for Mercurial

setlocal
set HG=%~f0

rem Use a full path to Python (relative to this script) as the standard Python
rem install does not put python.exe on the PATH...
rem %~dp0 is the directory of this script

%~dp0..\python "%~dp0hg" %*
endlocal

1 Ответ

3 голосов
/ 14 декабря 2010

Я успешно использую CruiseControl.NET 1.5.7256.1 с установленным Mercurial из этого msi , используя полный путь hg.exe в качестве значения executable.

В project\core\sourcecontrol\Mercurial\Mercurial.cs шаблон используется следующим образом:

buffer.AddArgument("--template", HistoryTemplate)

и будет отформатирован для командной строки следующим образом:

string.Format("{0}{1}{2}", arg, separator, StringUtil.AutoDoubleQuoteString(value))

где разделитель равен " ", а AutoDoubleQuoteString будетзаключите в кавычки шаблон, так что это не может быть причиной ошибки.

ОБНОВЛЕНИЕ 1

На самом деле, AutoDoubleQuoteString должно процитироватьшаблон, но в текущей версии не делает этого.Кроме того, даже если сборка завершается успешно при использовании hg.exe, выполнение фактической командной строки в командной строке возвращает ту же ошибку.

UPDATE 2

CruiseControl.NET 1.6.7981.1 был только что выпущен (см. примечания к выпуску ), и, поскольку шаблон теперь передается в виде файла, он работает просто отлично (по крайней мере, на моем ПК).

...