ReviewR.Web.Services.DiffService.ParseFileDiff C# (CSharp) Method

ParseFileDiff() public method

public ParseFileDiff ( string fileName, string diff ) : FileDiffModel
fileName string
diff string
return ReviewR.Web.Models.FileDiffModel
        public virtual FileDiffModel ParseFileDiff(string fileName, string diff)
        {
            Requires.NotNullOrEmpty(fileName, "fileName");
            Requires.NotNullOrEmpty(diff, "diff");

            IEnumerable<DiffHunk> hunks;
            using (TextReader rdr = new StringReader(diff))
            {
                hunks = Reader.ReadHunks(rdr);
            }

            // Flatten out to lines
            IList<LineDiffModel> lines = new List<LineDiffModel>();
            int lineIndex = 0;
            foreach (var hunk in hunks)
            {
                int leftLine = hunk.OriginalLocation.Line;
                int rightLine = hunk.ModifiedLocation.Line;
                lines.Add(new LineDiffModel() { Index = lineIndex++, Type = LineDiffType.HunkHeader, Text = hunk.ToString() });
                foreach (var line in hunk.Lines)
                {
                    LineDiffModel newLine = new LineDiffModel()
                    {
                        Index = lineIndex++,
                        Type = line.Type,
                        Text = line.Content
                    };
                    switch (line.Type)
                    {
                        case LineDiffType.Same:
                            newLine.LeftLine = leftLine++;
                            newLine.RightLine = rightLine++;
                            break;
                        case LineDiffType.Added:
                            newLine.RightLine = rightLine++;
                            break;
                        case LineDiffType.Removed:
                            newLine.LeftLine = leftLine++;
                            break;
                    }
                    lines.Add(newLine);
                }
            }

            return new FileDiffModel()
            {
                FileName = Converter.CleanFileName(fileName),
                Binary = false,
                Deletions = lines.Count(m => m.Type == LineDiffType.Removed),
                Insertions = lines.Count(m => m.Type == LineDiffType.Added),
                Lines = lines.ToList()
            };
        }