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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 public DiffLineColorizer(ChunkDiff chunkDiff)
 {
     _chunkDiff = chunkDiff;
 }
 public OffsetColorizer(ChunkDiff chunkDiff, SolidColorBrush addedWordBackground, SolidColorBrush removedWorkBackground)
 {
     _chunkDiff             = chunkDiff;
     _addedWordBackground   = addedWordBackground;
     _removedWorkBackground = removedWorkBackground;
 }