我目前在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());
任何形式的帮助将是非常赞赏:-)
谢谢!
是的!就是这样!我完全忽略了这种方法:-(谢谢! – MiG42