2012-03-27 52 views
1

我有一個ccnet項目,它監視兩個SVN存儲庫的變化。使用類型爲multi的源代碼控制塊可以很好地工作。現在項目需要觀察兩個存儲庫和一個文件。只有在兩個存儲庫中的一個更改了文件時,才需要構建該文件。在兩個存儲庫和文件系統發生變化時進行構建

我試圖在多源控制塊嵌套的多源控制塊如下(您可能忽略所有的變量):

<sourcecontrol type="multi"> 
     <requireChangesFromAll>True</requireChangesFromAll> 
     <sourceControls> 
     <sourcecontrol type="multi"> 
      <requireChangesFromAll>False</requireChangesFromAll> 
      <sourceControls>    
       <filtered>    
        <sourceControlProvider type="svn" autoGetSource="false"> 
         <executable>$(svn-exe)</executable> 
         <timeout units="minutes">60</timeout> 
         <trunkUrl>$(svn-srcmwo)</trunkUrl> 
         <workingDirectory>$(mwo-localfull)</workingDirectory> 
        </sourceControlProvider> 
        <inclusionFilters> 
         <cb:mwo-include-filters/>      
        </inclusionFilters> 
       </filtered> 
       <filtered> 
        <sourceControlProvider type="svn" autoGetSource="false"> 
         <executable>$(svn-exe)</executable> 
         <timeout units="minutes">10</timeout> 
         <trunkUrl>$(svn-orion)</trunkUrl> 
         <workingDirectory>$(orion-localfull)</workingDirectory> 
         <webUrlBuilder type="websvn"> 
          <url>$(viewvc-orion){0}$(viewvc-config)</url> 
         </webUrlBuilder> 
        </sourceControlProvider> 
        <inclusionFilters> 
         <pathFilter> 
          <pattern>$(svn-orion-trunk)</pattern> 
         </pathFilter> 
        </inclusionFilters> 
        <exclusionFilters> 
         <pathFilter> 
          <pattern>$(svn-grsim-makfiles)</pattern> 
         </pathFilter> 
        </exclusionFilters> 
       </filtered>    
      </sourceControls>    
     </sourcecontrol> 
     <sourcecontrol type="filesystem"> 
      <repositoryRoot>e:\build_listen</repositoryRoot> 
     </sourcecontrol> 
     </sourceControls> 
    </sourcecontrol> 

但CCValidator得到錯誤:

未使用節點檢測:< sourcecontrol類型= 「文件系統」 > <repositoryRoot> E:\ build_listen & LT/repositoryRoot > </sourcecontrol >

有沒有人看到如何做到這一點 - 在一個文件系統和兩個存儲庫上做和和?

+0

你的編輯不會解決問題。 ''不應該是''的父親,而應該是它的兄弟。無論如何,你爲什麼要編輯資源?如果所提供的源代碼是正確的,那麼如何理解你的問題? – 2012-03-29 17:21:57

+0

編輯的要點是糾正缺少的sourceControls元素,僅此而已。我想保留我的原始帖子,以符合我原來的想法和思路。我已經實施了您的解決方案,並且正在等待驗證它在實踐中的工作。然後,我會標記答案。 – 2012-03-29 17:47:29

回答

4

此嵌套源控制的事情是相當複雜的確實。首先你錯過了外部多源控制塊中的<sourceControls>標籤。其次還有在CCNET documentation on multi sourcecontrol blocks一個重要的注意事項:

Note that, due to the way the configuration gets parsed, if you are using a "multi" block, then the items within the element should not be elements (as you may expect). Instead, the name of the element should be the same as you would put in the "type" attribute when using a element.

這僅僅是源頭控制塊在現有配置的工作方式:<filtered>代替<sourcecontrol type="filtered">

所以這應該解決您的問題:

<sourcecontrol type="multi"> 
    <requireChangesFromAll>True</requireChangesFromAll> 
    <sourceControls> 
    <multi> 
     <requireChangesFromAll>False</requireChangesFromAll> 
     <sourceControls> 
     <filtered> 
      <sourceControlProvider type="svn" autoGetSource="false"> 
      <executable>$(svn-exe)</executable> 
      <timeout units="minutes">60</timeout> 
      <trunkUrl>$(svn-srcmwo)</trunkUrl> 
      <workingDirectory>$(mwo-localfull)</workingDirectory> 
      </sourceControlProvider> 
      <inclusionFilters> 
      <cb:mwo-include-filters/> 
      </inclusionFilters> 
     </filtered> 
     <filtered> 
      <sourceControlProvider type="svn" autoGetSource="false"> 
      <executable>$(svn-exe)</executable> 
      <timeout units="minutes">10</timeout> 
      <trunkUrl>$(svn-orion)</trunkUrl> 
      <workingDirectory>$(orion-localfull)</workingDirectory> 
      <webUrlBuilder type="websvn"> 
       <url>$(viewvc-orion){0}$(viewvc-config)</url> 
      </webUrlBuilder> 
      </sourceControlProvider> 
      <inclusionFilters> 
      <pathFilter> 
       <pattern>$(svn-orion-trunk)</pattern> 
      </pathFilter> 
      </inclusionFilters> 
      <exclusionFilters> 
      <pathFilter> 
       <pattern>$(svn-grsim-makfiles)</pattern> 
      </pathFilter> 
      </exclusionFilters> 
     </filtered> 
     </sourceControls> 
    </multi> 
    <filesystem> 
     <repositoryRoot>e:\build_listen</repositoryRoot> 
    </filesystem> 
    </sourceControls> 
</sourcecontrol> 
1

我認爲你不能有兩個以下sourcecontrol塊。只有文件系統觸發

  1. 一個項目:
    你應該重構你的項目如下。
    這將成爲下一個工作的觸發器

  2. 另一個項目鏈接到上一個和你的多源控件觸發器。

,看一下CruiseServer Control Task同步兩個工作:

+0

你是對的,你錯了。你不能有兩個連續的塊。但是,如果你將這些塊放在一個多源控制塊中(如OP所預期的那樣),並根據多源控制塊內的命名約定來調整節點名稱,它將起作用。 – 2012-03-28 17:38:36

+0

@ TheChairman thx的評論,這個功能相當複雜,所以我錯過了一些東西:) – TridenT 2012-03-29 06:03:32

相關問題