forked from SharpRepository/SharpDiff
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDiff.cs
More file actions
99 lines (80 loc) · 2.65 KB
/
Diff.cs
File metadata and controls
99 lines (80 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using System.Linq;
namespace SharpDiff.Formatter
{
public class Diff
{
public Diff()
{
Files = new List<DiffFile>();
}
public IList<DiffFile> Files { get; set; }
public void AddFile(string filename, FileChangeType fileChangeType)
{
if (CurrentFile != null && CurrentFile.FileName == filename) return;
Files.Add(new DiffFile() { FileName = filename, FileChangeType = fileChangeType });
}
public void AddFileSection(string description)
{
if (CurrentFile == null) throw new ArgumentException("Need a file first");
CurrentFile.FileSections.Add(new DiffFileSection(description));
}
private DiffFile CurrentFile
{
get { return Files.LastOrDefault(); }
}
private DiffFileSection CurrentFileSection
{
get { return CurrentFile == null ? null : CurrentFile.FileSections.LastOrDefault(); }
}
private FileChangeType _currentChangeType = FileChangeType.Unknown;
public void ProcessLine(string line)
{
if (line.StartsWith("diff "))
{
_currentChangeType = FileChangeType.Unknown;
return;
}
if (line.StartsWith("index "))
{
return;
}
if (line.StartsWith("deleted file"))
{
_currentChangeType = FileChangeType.Deleted;
return;
}
if (line.StartsWith("new file"))
{
_currentChangeType = FileChangeType.Created;
return;
}
if (line.StartsWith("---") || line.StartsWith("+++"))
{
// see we have a filename to show
if (line.Substring(4) != "/dev/null")
{
AddFile(line.Substring(6), _currentChangeType);
}
return;
}
if (line.StartsWith("@@"))
{
AddFileSection(line);
return;
}
if (line.StartsWith("-"))
{
CurrentFileSection.AddLine(new DiffLine(line.Substring(1), LineChangeType.Delete));
return;
}
if (line.StartsWith("+"))
{
CurrentFileSection.AddLine(new DiffLine(line.Substring(1), LineChangeType.Add));
return;
}
CurrentFileSection.AddLine(new DiffLine(line.Substring(1), LineChangeType.None));
}
}
}