1
1
using System ;
2
+ using System . Collections ;
3
+ using System . Collections . Generic ;
2
4
using System . Diagnostics ;
3
5
using System . Globalization ;
4
6
using System . Text ;
@@ -10,9 +12,10 @@ namespace LibGit2Sharp
10
12
/// Holds the changes between two <see cref="Blob"/>s.
11
13
/// </summary>
12
14
[ DebuggerDisplay ( "{DebuggerDisplay,nq}" ) ]
13
- public class ContentChanges
15
+ public class ContentChanges : IEnumerable < ContentChangeLine >
14
16
{
15
17
private readonly StringBuilder patchBuilder = new StringBuilder ( ) ;
18
+ private readonly List < ContentChangeLine > lines = new List < ContentChangeLine > ( ) ;
16
19
17
20
/// <summary>
18
21
/// Needed for mocking purposes.
@@ -95,15 +98,7 @@ private unsafe int LineCallback(git_diff_delta* delta, GitDiffHunk hunk, GitDiff
95
98
switch ( line . lineOrigin )
96
99
{
97
100
case GitDiffLineOrigin . GIT_DIFF_LINE_ADDITION :
98
- LinesAdded ++ ;
99
- prefix = Encoding . ASCII . GetString ( new [ ] { ( byte ) line . lineOrigin } ) ;
100
- break ;
101
-
102
101
case GitDiffLineOrigin . GIT_DIFF_LINE_DELETION :
103
- LinesDeleted ++ ;
104
- prefix = Encoding . ASCII . GetString ( new [ ] { ( byte ) line . lineOrigin } ) ;
105
- break ;
106
-
107
102
case GitDiffLineOrigin . GIT_DIFF_LINE_CONTEXT :
108
103
prefix = Encoding . ASCII . GetString ( new [ ] { ( byte ) line . lineOrigin } ) ;
109
104
break ;
@@ -113,11 +108,38 @@ private unsafe int LineCallback(git_diff_delta* delta, GitDiffHunk hunk, GitDiff
113
108
break ;
114
109
}
115
110
111
+ AppendGitDiffLine ( line ) ;
116
112
AppendToPatch ( prefix ) ;
117
113
AppendToPatch ( decodedContent ) ;
118
114
return 0 ;
119
115
}
120
116
117
+ internal void AppendGitDiffLine ( GitDiffLine line )
118
+ {
119
+ switch ( line . lineOrigin )
120
+ {
121
+ case GitDiffLineOrigin . GIT_DIFF_LINE_ADDITION :
122
+ LinesAdded ++ ;
123
+ lines . Add ( new ContentChangeLine ( line ) ) ;
124
+ break ;
125
+
126
+ case GitDiffLineOrigin . GIT_DIFF_LINE_DELETION :
127
+ LinesDeleted ++ ;
128
+ lines . Add ( new ContentChangeLine ( line ) ) ;
129
+ break ;
130
+ }
131
+ }
132
+
133
+ public IEnumerator < ContentChangeLine > GetEnumerator ( )
134
+ {
135
+ return lines . GetEnumerator ( ) ;
136
+ }
137
+
138
+ IEnumerator IEnumerable . GetEnumerator ( )
139
+ {
140
+ return lines . GetEnumerator ( ) ;
141
+ }
142
+
121
143
private string DebuggerDisplay
122
144
{
123
145
get
0 commit comments