async Task <PullRequestReviewCommentThreadViewModel> CreateTarget( IMessageDraftStore draftStore = null, IViewViewModelFactory factory = null, IPullRequestSession session = null, IPullRequestSessionFile file = null, IEnumerable <InlineCommentModel> comments = null, bool newThread = false) { draftStore = draftStore ?? Substitute.For <IMessageDraftStore>(); factory = factory ?? CreateFactory(); session = session ?? CreateSession(); file = file ?? CreateFile(); comments = comments ?? CreateComments(); var result = new PullRequestReviewCommentThreadViewModel(draftStore, factory); if (newThread) { await result.InitializeNewAsync(session, file, 10, DiffSide.Right, true); } else { var thread = Substitute.For <IInlineCommentThreadModel>(); thread.Comments.Returns(comments.ToList()); thread.LineNumber.Returns(10); await result.InitializeAsync(session, file, thread, true); } return(result); }
async Task <PullRequestReviewCommentThreadViewModel> CreateTarget( IViewViewModelFactory factory = null, IPullRequestSession session = null, IPullRequestSessionFile file = null, PullRequestReviewModel review = null, IEnumerable <InlineCommentModel> comments = null) { factory = factory ?? CreateFactory(); session = session ?? CreateSession(); file = file ?? Substitute.For <IPullRequestSessionFile>(); review = review ?? new PullRequestReviewModel(); comments = comments ?? CreateComments(); var thread = Substitute.For <IInlineCommentThreadModel>(); thread.Comments.Returns(comments.ToList()); var result = new PullRequestReviewCommentThreadViewModel(factory); await result.InitializeAsync(session, file, review, thread, true); return(result); }
/// <inheritdoc/> public async Task <IDifferenceViewer> OpenDiff(IPullRequestSession session, string relativePath, string headSha, bool scrollToFirstDraftOrDiff) { Guard.ArgumentNotNull(session, nameof(session)); Guard.ArgumentNotEmptyString(relativePath, nameof(relativePath)); try { var workingDirectory = headSha == null; var file = await session.GetFile(relativePath, headSha ?? "HEAD"); var mergeBase = await pullRequestService.GetMergeBase(session.LocalRepository, session.PullRequest); var encoding = pullRequestService.GetEncoding(session.LocalRepository, file.RelativePath); var rightFile = workingDirectory ? Path.Combine(session.LocalRepository.LocalPath, relativePath) : await pullRequestService.ExtractToTempFile( session.LocalRepository, session.PullRequest, relativePath, file.CommitSha, encoding); var diffViewer = FocusExistingDiffViewer(session, mergeBase, rightFile); if (diffViewer != null) { return(diffViewer); } var leftFile = await pullRequestService.ExtractToTempFile( session.LocalRepository, session.PullRequest, relativePath, mergeBase, encoding); var leftPath = await GetBaseFileName(session, file); var rightPath = file.RelativePath; var leftLabel = $"{leftPath};{session.GetBaseBranchDisplay()}"; var rightLabel = workingDirectory ? rightPath : $"{rightPath};PR {session.PullRequest.Number}"; var caption = $"Diff - {Path.GetFileName(file.RelativePath)}"; var options = __VSDIFFSERVICEOPTIONS.VSDIFFOPT_DetectBinaryFiles | __VSDIFFSERVICEOPTIONS.VSDIFFOPT_LeftFileIsTemporary; var openThread = (line : -1, side : DiffSide.Left); var scrollToFirstDiff = false; if (!workingDirectory) { options |= __VSDIFFSERVICEOPTIONS.VSDIFFOPT_RightFileIsTemporary; } if (scrollToFirstDraftOrDiff) { var(key, _) = PullRequestReviewCommentThreadViewModel.GetDraftKeys( session.LocalRepository.CloneUrl.WithOwner(session.RepositoryOwner), session.PullRequest.Number, relativePath, 0); var drafts = (await draftStore.GetDrafts <PullRequestReviewCommentDraft>(key) .ConfigureAwait(true)) .OrderByDescending(x => x.data.UpdatedAt) .ToList(); if (drafts.Count > 0 && int.TryParse(drafts[0].secondaryKey, out var line)) { openThread = (line, drafts[0].data.Side);