private static List <FileDiff> ParseFileDiffs(IRestResponse <EnterpriseDiffResponse> response) { var fileDiffs = new List <FileDiff>(); foreach (var diff in response.Data.Diffs) { var fileDiff = new FileDiff { From = diff.Source?.String, To = diff.Destination?.String, Chunks = new List <ChunkDiff>(), }; fileDiff.Type = fileDiff.From == null ? FileChangeType.Add : fileDiff.To == null ? FileChangeType.Delete : FileChangeType.Modified; fileDiffs.Add(fileDiff); foreach (var diffHunk in diff.Hunks ?? new List <Hunk>()) { var chunkDiff = new ChunkDiff() { Changes = new List <LineDiff>(), }; fileDiff.Chunks.Add(chunkDiff); foreach (var segment in diffHunk.Segments) { foreach (var line in segment.Lines) { var ld = new LineDiff() { Content = line.Text, OldIndex = segment.Type == "ADDED" ? null : (int?)line.Source, NewIndex = segment.Type == "REMOVED" ? null : (int?)line.Destination, Type = segment.Type == "ADDED" ? LineChangeType.Add : segment.Type == "REMOVED" ? LineChangeType.Delete : LineChangeType.Normal }; chunkDiff.Changes.Add(ld); } } } fileDiff.Additions = fileDiff.Chunks.Sum(y => y.Changes.Count(z => z.Add)); fileDiff.Deletions = fileDiff.Chunks.Sum(y => y.Changes.Count(z => z.Delete)); } return(fileDiffs); }
private void SetMaxes(ChunkDiff chunk) { var oldIndexes = chunk.Changes.Where(x => x.OldIndex != null).ToList(); var newIndexes = chunk.Changes.Where(x => x.NewIndex != null).ToList(); if (oldIndexes.Any()) { _maxFrom = oldIndexes.Select(x => " " + x.OldIndex.ToString()).Max(x => x.Length); } if (newIndexes.Any()) { _maxTo = newIndexes.Select(x => x.NewIndex.ToString() + " ").Max(x => x.Length); } _maxFromText = CreateText(new string('c', _maxFrom)); }
public DiffLineColorizer(ChunkDiff chunkDiff) { _chunkDiff = chunkDiff; }
public OffsetColorizer(ChunkDiff chunkDiff, SolidColorBrush addedWordBackground, SolidColorBrush removedWorkBackground) { _chunkDiff = chunkDiff; _addedWordBackground = addedWordBackground; _removedWorkBackground = removedWorkBackground; }