gpt4 book ai didi

tfs-sdk - TFS2010 - 轨道合并

转载 作者:行者123 更新时间:2023-12-04 17:26:05 28 4
gpt4 key购买 nike

给定一个变更集 c 并且给定 c 包含合并操作,我想获取已合并并导致 c 的所有变更集的列表。

例如:

  • 变更集 1 包含对某些文件的一些编辑。
  • 变更集 2 包含对其他一些文件的一些编辑。
  • 变更集 3 是变更集 1+2 到父分支的合并。

  • 现在我想通过询问变更集 3 来获得变更集 1+2,其中变更集合并了它所包含的内容。

    我想使用 TFS API 来做到这一点。我遇到了 versionControlServer.TrackMerges 方法,但是我不明白该方法期望的 ItemIdentifiers 应该是什么。不幸的是,我找不到如何使用此方法的示例。此外,我不确定这是否真的正确。

    最佳答案

    好吧,我花了很长时间,但我想我找到了如何做到这一点。这是将找到所有“父”变更集的代码:

    /// <summary>
    /// Gets the changesets which have resulted in the given changeset due
    /// to a merge operation.
    /// </summary>
    /// <param name="changeset">The changeset.</param>
    /// <param name="versionControlServer">The version control server.</param>
    /// <returns>
    /// A list of all changesets that have resulted into the given changeset.
    /// </returns>
    public static List<Changeset> GetMergedChangesets(Changeset changeset, VersionControlServer versionControlServer)
    {
    // remember the already covered changeset id's
    Dictionary<int, bool> alreadyCoveredChangesets = new Dictionary<int, bool>();

    // initialize list of parent changesets
    List<Changeset> parentChangesets = new List<Changeset>();

    // go through each change inside the changeset
    foreach(Change change in changeset.Changes)
    {
    // query for the items' history
    var queryResults = versionControlServer.QueryMergesExtended(
    new ItemSpec(change.Item.ServerItem, RecursionType.Full),
    new ChangesetVersionSpec(changeset.ChangesetId),
    null,
    null);

    // go through each changeset in the history
    foreach (var result in queryResults)
    {
    // only if the target-change is the given changeset, we have a hit
    if (result.TargetChangeset.ChangesetId == changeset.ChangesetId)
    {
    // if that hit has already been processed elsewhere, then just skip it
    if (!alreadyCoveredChangesets.ContainsKey(result.SourceChangeset.ChangesetId))
    {
    // otherwise add it
    alreadyCoveredChangesets.Add(result.SourceChangeset.ChangesetId, true);
    parentChangesets.Add(versionControlServer.GetChangeset(result.SourceChangeset.ChangesetId));
    }
    }
    }
    }

    return parentChangesets;
    }

    编辑:

    我刚刚意识到上面的代码中有一个小“错误”,我曾经在查询中写过“VersionSpec.Latest”,但是:“new ChangesetVersionSpec(changeset.ChangesetId)”会更好,因为这样变更集也会删除源分支后进行跟踪。

    关于tfs-sdk - TFS2010 - 轨道合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9514204/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com