/// <summary> /// The list of merge targets /// </summary> public IEnumerable <ITfsBranch> GetPossibleMergeTargetBranches(ITfsBranch sourceBranch, BranchSearchOptions searchOptions = BranchSearchOptions.Both) { if (sourceBranch.IsSubBranch) { return(sourceBranch.ChildBranches.AsEnumerable()); } var result = new ObservableCollection <ITfsBranch>(); var listOfForeignBranchesReferencingSourceBranch = (searchOptions == BranchSearchOptions.Both || searchOptions == BranchSearchOptions.Upwards) ? CompleteBranchList .Where(item => item.ChildBranchNames.Any(cb => cb == sourceBranch.Name)) : Enumerable.Empty <ITfsBranch>(); var listOfSourceBranchChildren = (searchOptions == BranchSearchOptions.Both || searchOptions == BranchSearchOptions.Downwards) ? sourceBranch.ChildBranchNames .Select(cb => CompleteBranchList.Where(item => item.Name == cb).FirstOrDefault()) : Enumerable.Empty <ITfsBranch>(); return(listOfForeignBranchesReferencingSourceBranch .Union(listOfSourceBranchChildren) .Where(item => item != null) .OrderBy(item => item.Name)); }
private ITfsBranch GetSpecificSubBranch(string serverPath) { ITfsBranch subBranch = null; WeakReference cachedSubBranchWeak; lock (_locker) { if (CachedSubBranches.TryGetValue(serverPath, out cachedSubBranchWeak)) { // Intentionally null? if (cachedSubBranchWeak == null) { return(null); } subBranch = cachedSubBranchWeak.Target as ITfsBranch; } } if (subBranch != null) { return(subBranch); } subBranch = CompleteBranchList.FirstOrDefault(cb => cb.ServerPath == serverPath); if (subBranch == null) { subBranch = new TfsBranch(VersionControlServer, serverPath, true); if (subBranch.ChildBranches.Count == 0) { subBranch = null; } } cachedSubBranchWeak = subBranch != null ? new WeakReference(subBranch) : null; lock (_locker) { if (false == CachedSubBranches.ContainsKey(serverPath)) { CachedSubBranches[serverPath] = cachedSubBranchWeak; } } return(subBranch); }