2016-09-29 76 views
1

我目前在Plastic SCM VCS插件中添加了对功能分支的支持。我想我已经准备好了所有东西(显然我错了),但TeamCity会检测到所有属于所有分支的新变更集。这会使插件不可用,因为默认分支中的新提交会触发所有活动分支中的构建。我有一个PlasticVcsSupport类延伸ServerVcsSupport。这是PlasticVcsSupport.getCollectChangesPolicy()方法:在TeamCity VCS插件中实现功能分支

@NotNull 
public CollectChangesPolicy getCollectChangesPolicy() { 
    return new PlasticCollectChangesPolicy(this, currentSettings, settingsLock); 
} 

这是PlasticCollectChangesPolicy类的概述:公共类PlasticCollectChangesPolicy实现CollectChangesBetweenRepositories {

@NotNull 
    public RepositoryStateData getCurrentState(VcsRoot root) throws VcsException { 
     /* ... */ 
     BranchInfo[] branches = QueryCommands.GetBranches(wi); 

     return RepositoryStateData.createVersionState(
       mSettings.getSelectorBranch(), getBranchHeads(branches)); 
     /* ... */ 
    } 

    @NotNull 
    public List<ModificationData> collectChanges(
      @NotNull VcsRoot fromRoot, 
      @NotNull RepositoryStateData fromState, 
      @NotNull VcsRoot toRoot, 
      @NotNull RepositoryStateData toState, 
      @NotNull CheckoutRules checkoutRules) throws VcsException { 
     return collectChanges(fromRoot, fromState, toState, checkoutRules); 
    } 

    public List<ModificationData> collectChanges(
      @NotNull VcsRoot vcsRoot, 
      @NotNull RepositoryStateData fromState, 
      @NotNull RepositoryStateData toState, 
      @NotNull CheckoutRules checkoutRules) throws VcsException { 
     /* ... */ 

     for (String branch : fromState.getBranchRevisions().keySet()){ 
      result.addAll(getDifferencesBetweenVersions(
        vcsRoot, 
        wkInfo, 
        branch, 
        fromState.getBranchRevisions().get(branch), 
        toState.getBranchRevisions().get(branch))); 
     } 
     /* ... */ 

     return result; 
    } 
} 

getCurrentStatus()方法似乎是工作的罚款,因为被正确地检测到新的变化并且传递给collectChanges()方法的从/到状态是有意义的。但是,似乎我错过了要返回的ModificationData对象的设置,因为TeamCity无法找到每个ModificationData的分支。我正在使用addParentRevision(String)方法设置适当的父变更集,但没有取得任何结果。我检查git的插件代码,但我却看不出有什么我失踪:-(

这是怎么ModificationData内置:

List<VcsChange> files = /* fill changeset data */; 
ModificationData md = new ModificationData(
    changeset.getDate(), 
    files, 
    changeset.getComments(), 
    changeset.getOwner(), 
    vcsRoot, // Unmodified 
    changeset.getSpec(), 
    changeset.getId()); 
md.addParentRevision(changeset.getParentSpec()); 

任何形式的帮助将是非常赞赏:-)

谢谢!

回答

1

请务必包括覆盖:

public boolean isDAGBasedVcs() {return true;} 
+0

是的!就是这样!我完全忽略了这种方法:-(谢谢! – MiG42