Skip to content

Commit e50e969

Browse files
robertodecurnexothatbrian
authored andcommitted
Preventing Git::Diff from parsing files content as diff metadata
fix #196
1 parent 3f41618 commit e50e969

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

lib/git/diff.rb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,20 +116,25 @@ def cache_stats
116116

117117
# break up @diff_full
118118
def process_full_diff
119+
defaults = {
120+
:mode => '',
121+
:src => '',
122+
:dst => '',
123+
:type => 'modified'
124+
}
119125
final = {}
120126
current_file = nil
121127
@full_diff.split("\n").each do |line|
122-
if m = /diff --git a\/(.*?) b\/(.*?)/.match(line)
128+
if m = /^diff --git a\/(.*?) b\/(.*?)/.match(line)
123129
current_file = m[1]
124-
final[current_file] = {:patch => line, :path => current_file,
125-
:mode => '', :src => '', :dst => '', :type => 'modified'}
130+
final[current_file] = defaults.merge({:patch => line, :path => current_file})
126131
else
127-
if m = /index (.......)\.\.(.......)( ......)*/.match(line)
132+
if m = /^index (.......)\.\.(.......)( ......)*/.match(line)
128133
final[current_file][:src] = m[1]
129134
final[current_file][:dst] = m[2]
130135
final[current_file][:mode] = m[3].strip if m[3]
131136
end
132-
if m = /(.*?) file mode (......)/.match(line)
137+
if m = /^([[:alpha:]]*?) file mode (......)/.match(line)
133138
final[current_file][:type] = m[1]
134139
final[current_file][:mode] = m[2]
135140
end

0 commit comments

Comments
 (0)