私は現在、Plastic SCM VCS プラグインのフィーチャー ブランチのサポートを追加しています。すべての準備ができていると思います (明らかに間違っています) が、TeamCity はすべての新しい変更セットがすべてのブランチに属していることを検出します。これにより、プラグインが使用できなくなります。これは、デフォルト ブランチでの新しいコミットがすべてのアクティブなブランチでビルドをトリガーするためです。
をPlasticVcsSupport
拡張するクラスがありServerVcsSupport
ます。これはPlasticVcsSupport.getCollectChangesPolicy()
方法です:
@NotNull
public CollectChangesPolicy getCollectChangesPolicy() {
return new PlasticCollectChangesPolicy(this, currentSettings, settingsLock);
}
これはPlasticCollectChangesPolicy
クラスの概要です: public class PlasticCollectChangesPolicy implements 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()
新しい変更が適切に検出され、メソッドに渡された from/to 状態が理にかなっているため、メソッド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());
どんな種類の助けも本当に感謝しています:-)
ありがとう!