private MatchResult match(DiffRefs diffRefs, DiffToolInfo difftoolInfo) { FullContextDiffProvider provider = new FullContextDiffProvider(_gitRepository); FullContextDiff context = provider.GetFullContextDiff(diffRefs.LeftSHA, diffRefs.RightSHA, difftoolInfo.Left?.FileName ?? null, difftoolInfo.Right?.FileName ?? null); Debug.Assert(context.Left.Count == context.Right.Count); bool isCurrentSideLeft = difftoolInfo.IsLeftSideCurrent; DiffToolInfo.Side currentSide = isCurrentSideLeft ? difftoolInfo.Left.Value : difftoolInfo.Right.Value; SparsedList <string> firstList = isCurrentSideLeft ? context.Left : context.Right; SparsedList <string> secondList = isCurrentSideLeft ? context.Right : context.Left; SparsedListIterator <string> itFirst = SparsedListUtils.FindNth(firstList.Begin(), currentSide.LineNumber - 1); SparsedListIterator <string> itSecond = SparsedListUtils.Advance(secondList.Begin(), itFirst.Position); return(new MatchResult { LeftLineNumber = isCurrentSideLeft ? currentSide.LineNumber : itSecond.LineNumber + 1, RightLineNumber = isCurrentSideLeft ? itSecond.LineNumber + 1 : currentSide.LineNumber }); }
private int?getOppositeLine(DiffRefs refs, bool isLeftSide, string leftFileName, string rightFileName, int lineNumber) { FullContextDiff context = _git.FullContextDiffProvider.GetFullContextDiff( refs.LeftSHA, refs.RightSHA, leftFileName, rightFileName); Debug.Assert(context.Left.Count == context.Right.Count); SparsedList <string> currentList = isLeftSide ? context.Left : context.Right; SparsedList <string> oppositeList = isLeftSide ? context.Right : context.Left; SparsedListIterator <string> itCurrentList = SparsedListUtils.FindNth(currentList.Begin(), lineNumber - 1); SparsedListIterator <string> itOppositeList = SparsedListUtils.Advance(oppositeList.Begin(), itCurrentList.Position); return(itOppositeList.GetLineNumber() == null ? new int?() : itOppositeList.GetLineNumber().Value + 1); }