我有一个程序可以读取最新版本并从中获取所有更改集。然后可以确定我拥有它的变量是否实际上是合并,以及它来自何处。
以下是我所拥有的:
List<IChangesetSummary> changeSets = InformationNodeConverters.GetAssociatedChangesets(build);
IEnumerable<Changeset> changesetDetails = changeSets.Select(x => versionControlServer.GetChangeset(x.ChangesetId));
// Determine is the first changeset was a merge
changesetDetails.First().IsMerge // How to check is the changeset is part of a merge?
更新:
到目前为止,我已经更新了
foreach (var cs in changesetDetails)
{
foreach (Change change in cs.Changes)
{
if ((change.ChangeType & ChangeType.Merge) == 0)
continue;
foreach(var m in change.MergeSources)
但MergeSources
总是空的。
答案 0 :(得分:7)
请改用VersionControlServer.GetChangesForChangeset
方法。最后一个参数表示应包含合并源信息。
List<IChangesetSummary> changeSets = InformationNodeConverters.GetAssociatedChangesets(build);
IEnumerable<Change> changes = changeSets.SelectMany(x => versionControlServer.GetChangesForChangeset(x.ChangesetId, false, Int32.MaxValue, null, null, true));
foreach (Change change in changes)
{
if ((change.ChangeType & ChangeType.Merge) == 0) continue;
foreach (var m in change.MergeSources)
{
// ...
}
}
答案 1 :(得分:2)
您需要检查Changes
内的任何Changeset
是否属于ChangeType Merge
。
我不知道以下是否有效,但您明白了这一点:
changesetDetails.First().Changes.Any(c => (c.ChangeType & ChangeType.Merge) > 0)
答案 2 :(得分:0)
如果操作是“合并”,您需要查询文件。
答案 3 :(得分:0)
使用接受VersionControlServer.GetChangeset
bool参数的includeDownloadInfo
重载。将此参数设置为true
将在返回的变更集中包含MergeSources
。
IEnumerable<Changeset> changesetDetails = changeSets.Select(x => versionControlServer.GetChangeset(x.ChangesetId, true, true));