1

私は現在、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()は正常に機能しているようです。ただし、ModificationDataTeamCity は各のブランチを見つけることができないため、返されたオブジェクトに設定する何かが欠けているようです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());

どんな種類の助けも本当に感謝しています:-)

ありがとう!

4

1 に答える 1

1

必ずオーバーライドを含めてください:

public boolean isDAGBasedVcs() {return true;}
于 2016-09-29T20:50:30.883 に答える