private static MergeResult MergeToBranch(MergeInfoViewModel mergeInfoeViewModel, MergeOption mergeOption, List<MergeRelation> mergeRelationships, Workspace workspace) { var source = mergeInfoeViewModel.SourcePath; var target = mergeInfoeViewModel.TargetPath; var version = mergeInfoeViewModel.ChangesetVersionSpec; if (!GetLatest(target, mergeRelationships, workspace)) { return MergeResult.CanNotGetLatest; } var mergeOptions = ToTfsMergeOptions(mergeOption); var status = workspace.Merge(source, target, version, version, LockLevel.None, RecursionType.Full, mergeOptions); if (HasConflicts(status)) { var conflicts = AutoResolveConflicts(workspace, target, mergeOption); if (!conflicts.IsNullOrEmpty()) { return IsTryRestoreUnexpectedFile(conflicts) ? MergeResult.UnexpectedFileRestored : MergeResult.HasConflicts; } } return MergeResult.Merged; }
private MergeResult MergeByFile(Change[] changes, string targetBranch, List<MergeRelation> mergeRelationships, VersionSpec version, MergeOption mergeOption, Workspace workspace) { if (!GetLatest(targetBranch, mergeRelationships, workspace)) { return MergeResult.CanNotGetLatest; } var mergeOptions = ToTfsMergeOptions(mergeOption); var hasConflicts = false; foreach (var change in changes) { var mergeRelation = mergeRelationships.FirstOrDefault( r => r.Item == change.Item.ServerItem && r.Target.StartsWith(targetBranch)); if (mergeRelation != null) { var recursionType = CalculateRecursionType(mergeRelation); var status = workspace.Merge(mergeRelation.Source, mergeRelation.Target, version, version, LockLevel.None, recursionType, mergeOptions); if (!hasConflicts && HasConflicts(status)) { hasConflicts = true; } } else { Logger.Info("File {0} not merged to branch {1}", change.Item.ServerItem, targetBranch); } } if (hasConflicts) { var conflicts = AutoResolveConflicts(workspace, targetBranch, mergeOption); if (!conflicts.IsNullOrEmpty()) { return IsTryRestoreUnexpectedFile(conflicts) ? MergeResult.UnexpectedFileRestored : MergeResult.HasConflicts; } } return MergeResult.Merged; }