Как заставить ccnet обновлять несколько проектов независимо в одном репозитории Mercurial?

У меня есть центральный репозиторий hg с несколькими подпроектами. Примерно так:

/Hg_central
    /subproject-a
    /subproject-b
    /...

Я пытаюсь настроить сервер cc.net так, чтобы он создавал подпроект ТОЛЬКО в том случае, если его каталог был обновлен.

Моя текущая проблема заключается в том, что после обновления и сборки одного из подпроектов сервер не найдет никаких изменений для других подпроектов, поскольку mercurial обновил весь репозиторий. CC.NET не будет создавать другие подпроекты, если не будет выполнено другое обновление. Я безуспешно пытался использовать includeFilters. Я также не могу позволить себе иметь отдельный рабочий каталог для каждого подпроекта. Чего мне не хватает, чтобы сделать это возможным?

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

<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> 
<project name="subproject-a">
    <workingDirectory>G:\Hg-clone\</workingDirectory>
    <triggers>
        <intervalTrigger name="continuous" seconds="60" buildCondition="IfModificationExists" initialSeconds="20" />
    </triggers>
    <sourcecontrol type="filtered">
    <inclusionFilters>
        <pathFilter>
            <pattern>/subproject-a/**/*</pattern>
        </pathFilter>
    </inclusionFilters>
    <sourceControlProvider type="hg" autoGetSource="true" >
        <repo>http://myserver/myproject</repo>
        <multipleHeadsFail>false</multipleHeadsFail>
    </sourceControlProvider>
    </sourcecontrol>
    <tasks>
        <exec>
            <executable>mybuild.bat</executable>
        </exec>
    </tasks>
</project>
<project name="subproject-b">
    <workingDirectory>G:\Hg-clone\</workingDirectory>
    <triggers>
        <intervalTrigger name="continuous" seconds="60" buildCondition="IfModificationExists" initialSeconds="20" />
    </triggers>
    <sourcecontrol type="filtered">
    <inclusionFilters>
        <pathFilter>
            <pattern>/subproject-b/**/*</pattern>
        </pathFilter>
    </inclusionFilters>
    <sourceControlProvider type="hg" autoGetSource="true" >
        <repo>http://myserver/myproject</repo>
        <multipleHeadsFail>false</multipleHeadsFail>
    </sourceControlProvider>
    </sourcecontrol>
    <tasks>
        <exec>
            <executable>mybuild.bat</executable>
        </exec>
    </tasks>
</project>
</cruisecontrol>

person TwoMasters    schedule 29.04.2011    source источник


Ответы (1)


С svn это работает как шарм, поэтому я немного удивлен, что mercurial не работает.

В любом случае возможный обходной путь — определить один проект, целью которого является обновление исходного кода, а все остальные проекты должны иметь Триггер проекта для этого проекта.

ХТН

person Hertzel Guinness    schedule 03.06.2011
comment
Проблема с mercurial заключается в том, что вы не можете обновить только подпапку, вам нужно обновить весь репозиторий сразу, поэтому CC.NET, похоже, не справляется с этим правильно. Попробовал ваше решение, вроде работает нормально! Большое спасибо! - person TwoMasters; 06.06.2011