private TrackMergeInfo GetTrackMergeInfo(MergeInfoViewModel mergeInfo, Changeset changeset, VersionControlServer versionControl) { var mergesRelationships = GetMergesRelationships(mergeInfo.SourcePath, versionControl); var trackMerges = versionControl.TrackMerges(new[] {changeset.ChangesetId}, new ItemIdentifier(mergeInfo.SourcePath), mergesRelationships.ToArray(), null); var trackMergeInfo = GetTrackMergeInfo(versionControl, trackMerges, mergeInfo.SourcePath); trackMergeInfo.FromOriginalToSourceBranches.Reverse(); trackMergeInfo.SourceComment = changeset.Comment; trackMergeInfo.SourceBranch = mergeInfo.SourceBranch; trackMergeInfo.SourceChangesetId = changeset.ChangesetId; trackMergeInfo.SourceWorkItemIds = changeset.AssociatedWorkItems != null ? changeset.AssociatedWorkItems.Select(w => (long) w.Id).ToList() : new List<long>(); trackMergeInfo.OriginaBranch = trackMergeInfo.OriginaBranch ?? trackMergeInfo.SourceBranch; trackMergeInfo.OriginalComment = trackMergeInfo.OriginalComment ?? trackMergeInfo.SourceComment; return trackMergeInfo; }
private TrackMergeInfo GetTrackMergeInfo(VersionControlServer versionControl, IEnumerable<ExtendedMerge> allTrackMerges, string sourcePath) { var result = new TrackMergeInfo { FromOriginalToSourceBranches = new List<string>(), }; var trackMerges = allTrackMerges.Where(m => m.TargetItem.Item == sourcePath).ToArray(); if (!trackMerges.IsNullOrEmpty()) { var changesetIds = trackMerges.Select(t => t.SourceChangeset.ChangesetId).ToArray(); var mergeSourceBranches = _changesetService.GetAssociatedBranches(changesetIds) .Select(b => b.Item) .Distinct() .ToArray(); if (mergeSourceBranches.Length == 1) { result.FromOriginalToSourceBranches.Add(mergeSourceBranches[0]); var sourceFolder = trackMerges.First().SourceItem.Item.ServerItem; var comment = trackMerges.First().SourceChangeset.Comment; if (trackMerges.Length > 1) { foreach (var merge in trackMerges.Skip(1)) sourceFolder = FindShareFolder(sourceFolder, merge.SourceItem.Item.ServerItem); comment = "source changeset has several comments"; } var sourceMergesRelationships = versionControl.QueryMergeRelationships(sourceFolder) .Where(r => !r.IsDeleted) .ToArray(); var sourceTrackMerges = versionControl.TrackMerges(changesetIds, new ItemIdentifier(sourceFolder), sourceMergesRelationships, null); var sourceTrackMergeInfo = GetTrackMergeInfo(versionControl, sourceTrackMerges, sourceFolder); if (!sourceTrackMergeInfo.FromOriginalToSourceBranches.IsNullOrEmpty()) { result.FromOriginalToSourceBranches.AddRange(sourceTrackMergeInfo.FromOriginalToSourceBranches); result.OriginalComment = sourceTrackMergeInfo.OriginalComment; result.OriginaBranch = sourceTrackMergeInfo.OriginaBranch; } else { result.OriginalComment = comment; result.OriginaBranch = mergeSourceBranches[0]; } } else { result.FromOriginalToSourceBranches.Add("multi"); result.OriginaBranch = "multi"; result.OriginalComment = "source changeset has several comments"; } } return result; }