git_diff 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/git_diff/file.rb +29 -4
- data/lib/git_diff/version.rb +1 -1
- data/test/git_diff_test.rb +52 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 880459816cc9946e902a423f2ced95ad11c507a7
|
4
|
+
data.tar.gz: 6d9541ae1bd4303750cb9d14d2968053dccad910
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5357077be7040cba74dd3b16387ff1508120e33109f2e06ab63d719a61da7d9d8dafc8a035ac67187da854d920667759a816564beba776779187213401baf526
|
7
|
+
data.tar.gz: 8a4b2b47b2b1a726c4963b5be45f16b0bb40fa190ccbcb063fc42a99256b94ea3d5fb6e691f22845ba6fd1daa9633fdb7286ca0deb7aa19018f392f54846ca24
|
data/lib/git_diff/file.rb
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
module GitDiff
|
2
2
|
class File
|
3
3
|
|
4
|
-
attr_reader :a_path, :a_blob, :b_path, :b_blob, :b_mode, :hunks
|
4
|
+
attr_reader :a_path, :a_blob, :b_path, :b_blob, :b_mode, :hunks, :binary
|
5
5
|
|
6
6
|
def self.from_string(string)
|
7
|
-
if /^diff --git
|
8
|
-
File.new
|
7
|
+
if path_info = /^diff --git(?: a\/(\S+))?(?: b\/(\S+))?/.match(string)
|
8
|
+
File.new(
|
9
|
+
a_path: path_info.captures[0] || '/dev/null',
|
10
|
+
b_path: path_info.captures[1] || '/dev/null'
|
11
|
+
)
|
9
12
|
end
|
10
13
|
end
|
11
14
|
|
12
|
-
def initialize
|
15
|
+
def initialize(a_path: '/dev/null', b_path: '/dev/null')
|
13
16
|
@hunks = []
|
17
|
+
@a_path = a_path
|
18
|
+
@b_path = b_path
|
14
19
|
end
|
15
20
|
|
16
21
|
def <<(string)
|
@@ -38,6 +43,7 @@ module GitDiff
|
|
38
43
|
def add_hunk(hunk)
|
39
44
|
self.current_hunk = hunk
|
40
45
|
hunks << current_hunk
|
46
|
+
@binary = false
|
41
47
|
end
|
42
48
|
|
43
49
|
def append_to_current_hunk(string)
|
@@ -60,6 +66,25 @@ module GitDiff
|
|
60
66
|
@a_path = "/dev/null"
|
61
67
|
when /^deleted file mode [0-9]{6}$/.match(string)
|
62
68
|
@b_path = "/dev/null"
|
69
|
+
when mode_info = /^(old|new) mode ([0-9]{6})$/.match(string)
|
70
|
+
if mode_info.captures[0] == "old"
|
71
|
+
@a_mode = mode_info.captures[1]
|
72
|
+
else
|
73
|
+
@b_mode = mode_info.captures[1]
|
74
|
+
end
|
75
|
+
when rename_info = /^rename (from|to) (.*)$/.match(string)
|
76
|
+
if rename_info.captures[0] == "from"
|
77
|
+
@a_path = rename_info.captures[1]
|
78
|
+
else
|
79
|
+
@b_path = rename_info.captures[1]
|
80
|
+
end
|
81
|
+
when binary_info = /^Binary files (?:\/dev\/null|a\/(.*)) and (?:\/dev\/null|b\/(.*)) differ$/.match(string)
|
82
|
+
@binary = true
|
83
|
+
@a_path ||= binary_info[1] || "/dev/null"
|
84
|
+
@b_path ||= binary_info[2] || "/dev/null"
|
85
|
+
when /^similarity/.match(string)
|
86
|
+
# trash
|
87
|
+
true
|
63
88
|
end
|
64
89
|
end
|
65
90
|
end
|
data/lib/git_diff/version.rb
CHANGED
data/test/git_diff_test.rb
CHANGED
@@ -128,4 +128,56 @@ index 033b446..0e2d140 100644
|
|
128
128
|
[186,186]
|
129
129
|
], second_hunk.lines.map { |line| line.line_number.pair }
|
130
130
|
end
|
131
|
+
|
132
|
+
def test_binary_file_diff
|
133
|
+
diff = GitDiff.from_string 'diff --git a/app/assets/bin.eot b/app/assets/bin.eot
|
134
|
+
new file mode 100644
|
135
|
+
index 0000000..2cbab9c
|
136
|
+
Binary files /dev/null and b/app/assets/bin.eot differ'
|
137
|
+
|
138
|
+
refute_nil diff
|
139
|
+
assert_instance_of GitDiff::Diff, diff
|
140
|
+
|
141
|
+
assert_equal 1, diff.files.count
|
142
|
+
file = diff.files[0]
|
143
|
+
|
144
|
+
assert file.binary
|
145
|
+
assert_equal '/dev/null', file.a_path
|
146
|
+
assert_equal "app/assets/bin.eot", file.b_path
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_perm_change_diff
|
150
|
+
diff = GitDiff.from_string 'diff --git a/bin/setup b/bin/setup
|
151
|
+
old mode 100644
|
152
|
+
new mode 100755'
|
153
|
+
|
154
|
+
refute_nil diff
|
155
|
+
assert_instance_of GitDiff::Diff, diff
|
156
|
+
|
157
|
+
assert_equal 1, diff.files.count
|
158
|
+
file = diff.files[0]
|
159
|
+
|
160
|
+
assert_equal 0, file.hunks.count
|
161
|
+
|
162
|
+
assert_equal "bin/setup", file.a_path
|
163
|
+
assert_equal "bin/setup", file.b_path
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_rename_diff
|
167
|
+
diff = GitDiff.from_string 'diff --git a/lib/path1/my_file.rb b/lib/path2/my_file2.rb
|
168
|
+
similarity index 100%
|
169
|
+
rename from lib/path1/my_file.rb
|
170
|
+
rename to lib/path2/my_file2.rb'
|
171
|
+
|
172
|
+
refute_nil diff
|
173
|
+
assert_instance_of GitDiff::Diff, diff
|
174
|
+
|
175
|
+
assert_equal 1, diff.files.count
|
176
|
+
file = diff.files[0]
|
177
|
+
|
178
|
+
assert_equal 0, file.hunks.count
|
179
|
+
|
180
|
+
assert_equal "lib/path1/my_file.rb", file.a_path
|
181
|
+
assert_equal "lib/path2/my_file2.rb", file.b_path
|
182
|
+
end
|
131
183
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Olson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.6.
|
122
|
+
rubygems_version: 2.6.13
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: A Ruby library for parsing git diffs.
|