public BranchFactory(string sourceBranch, string sourceFolder, ChangesetVersionSpec changesetVersion, BranchValidator branchValidator, IEventAggregator eventAggregator) { _sourceBranch = sourceBranch; _sourceFolder = sourceFolder; _changesetVersion = changesetVersion; _branchValidator = branchValidator; _eventAggregator = eventAggregator; }
private ObservableCollection<MergeInfoViewModel> GetBranches(ITeamFoundationContext context, ChangesetViewModel changesetViewModel) { if (context == null) return new ObservableCollection<MergeInfoViewModel>(); var tfs = context.TeamProjectCollection; var versionControl = tfs.GetService<VersionControlServer>(); var result = new ObservableCollection<MergeInfoViewModel>(); var workspace = _workspace; var changesetService = _changesetService; var changes = changesetService.GetChanges(changesetViewModel.ChangesetId); var sourceTopFolder = CalculateTopFolder(changes); var mergesRelationships = GetMergesRelationships(sourceTopFolder, versionControl); if (mergesRelationships.Count > 0) { var sourceBranchIdentifier = changesetViewModel.Branches.Select(b => new ItemIdentifier(b)).First(); var sourceBranch = sourceBranchIdentifier.Item; var trackMerges = versionControl.TrackMerges(new[] { changesetViewModel.ChangesetId }, new ItemIdentifier(sourceTopFolder), mergesRelationships.ToArray(), null); var changesetVersionSpec = new ChangesetVersionSpec(changesetViewModel.ChangesetId); var branchValidator = new BranchValidator(workspace, trackMerges); var branchFactory = new BranchFactory(sourceBranch, sourceTopFolder, changesetVersionSpec, branchValidator, _eventAggregator, _settings); var sourceBranchInfo = versionControl.QueryBranchObjects(sourceBranchIdentifier, RecursionType.None)[0]; if (sourceBranchInfo.Properties != null && sourceBranchInfo.Properties.ParentBranch != null && !sourceBranchInfo.Properties.ParentBranch.IsDeleted) { var targetBranch = sourceBranchInfo.Properties.ParentBranch; var targetPath = GetTargetPath(mergesRelationships, targetBranch); if (targetPath != null) { var mergeInfo = branchFactory.CreateTargetBranchInfo(targetBranch, targetPath); mergeInfo._checked = mergeInfo.ValidationResult == BranchValidationResult.Success; result.Add(mergeInfo); } } var currentBranchInfo = branchFactory.CreateSourceBranch(); result.Add(currentBranchInfo); if (sourceBranchInfo.ChildBranches != null) { var childBranches = sourceBranchInfo.ChildBranches.Where(b => !b.IsDeleted) .Reverse(); foreach (var childBranch in childBranches) { var targetBranch = childBranch; var targetPath = GetTargetPath(mergesRelationships, targetBranch); if (targetPath != null) { var mergeInfo = branchFactory.CreateTargetBranchInfo(targetBranch, targetPath); result.Add(mergeInfo); } } } // Feature branch if (mergesRelationships.Count > 0) { var changetIds = mergesRelationships.Select(r => r.Version).Cast<ChangesetVersionSpec>().Select(c => c.ChangesetId) .Distinct() .ToArray(); var branches = _changesetService.GetAssociatedBranches(changetIds); foreach (var mergesRelationship in mergesRelationships) { var targetBranch = branches.FirstOrDefault(b => IsTargetPath(mergesRelationship, b)); if (targetBranch != null) { var mergeInfo = branchFactory.CreateTargetBranchInfo(targetBranch, mergesRelationship); result.Add(mergeInfo); } } } } return result; }