在TeamCity VCS插件中实现功能分支

时间:2016-09-29 10:54:07

标签: plugins version-control teamcity plasticscm feature-branch

我目前正在Plastic SCM VCS插件中添加对功能分支的支持。我想我已准备就绪(显然我错了)但TeamCity会检测到属于所有分支的所有新变更集。这会使插件无法使用,因为默认分支中的新提交会触发所有活动分支中的构建。

我有一个PlasticVcsSupport班级ServerVcsSupport。这是PlasticVcsSupport.getCollectChangesPolicy()方法:

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

这是PlasticCollectChangesPolicy类的概述:public class 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()方法的from / to状态是有意义的。但是,似乎我遗漏了要设置为返回的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 个答案:

答案 0 :(得分:1)

确保包含覆盖:

in_ptr