git_diff 0.3.0 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +46 -0
- data/.travis.yml +9 -2
- data/Gemfile +3 -1
- data/README.md +1 -1
- data/Rakefile +6 -1
- data/git_diff.gemspec +10 -8
- data/lib/git_diff.rb +3 -1
- data/lib/git_diff/diff.rb +4 -2
- data/lib/git_diff/file.rb +39 -14
- data/lib/git_diff/hunk.rb +3 -6
- data/lib/git_diff/line.rb +3 -1
- data/lib/git_diff/line/addition.rb +3 -1
- data/lib/git_diff/line/context.rb +3 -1
- data/lib/git_diff/line/deletion.rb +3 -1
- data/lib/git_diff/line_number.rb +3 -1
- data/lib/git_diff/line_number_calculation.rb +3 -2
- data/lib/git_diff/line_number_range.rb +4 -2
- data/lib/git_diff/parser.rb +2 -0
- data/lib/git_diff/range_info.rb +3 -1
- data/lib/git_diff/stats.rb +3 -1
- data/lib/git_diff/stats_calculator.rb +3 -1
- data/lib/git_diff/stats_collector.rb +3 -1
- data/lib/git_diff/stats_collector/hunk.rb +2 -4
- data/lib/git_diff/stats_collector/rollup.rb +3 -1
- data/lib/git_diff/version.rb +3 -1
- data/test/{diff_file_test.rb → file_test.rb} +6 -6
- data/test/git_diff_test.rb +131 -60
- data/test/hunk_test.rb +4 -3
- data/test/line/addition_test.rb +4 -2
- data/test/line/context_test.rb +5 -3
- data/test/line/deletion_test.rb +4 -2
- data/test/line_number_calculation_test.rb +4 -3
- data/test/line_number_range_test.rb +13 -5
- data/test/line_number_test.rb +6 -5
- data/test/line_test.rb +4 -4
- data/test/range_info_test.rb +3 -1
- data/test/stats_calculator_test.rb +4 -3
- data/test/test_helper.rb +3 -1
- metadata +37 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 52a2071ba28b2a0703fabec01c2c4f50c3eae657255a096b5603fcc7cffa8381
|
4
|
+
data.tar.gz: c888271d5001095ab3dcae18cf209bc03eb0251d57e2d528deb9873cc3a66d02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a145f66c6c8345883093adef62a6bdbde48d5475ee41923bd523f5f7d8f471cc3c8637a89eb4b2003749488c32f2dfffc0a4d78f9f395e259770386fd6f00739
|
7
|
+
data.tar.gz: 323ad1908b9f757c36185ec943e31f1620185d0b0b8052d5e8cf6680dd4ac8dc9e4204f88d6f32615458c0282154d250909f10b83988933c7c34f5eca1c7590c
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- "**/*.rb"
|
4
|
+
- "*.gemspec"
|
5
|
+
- "Gemfile"
|
6
|
+
- "Rakefile"
|
7
|
+
TargetRubyVersion: 2.5
|
8
|
+
|
9
|
+
Lint/AssignmentInCondition:
|
10
|
+
Enabled: false
|
11
|
+
|
12
|
+
Metrics/AbcSize:
|
13
|
+
Enabled: false
|
14
|
+
|
15
|
+
Metrics/ClassLength:
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Metrics/CyclomaticComplexity:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
Metrics/LineLength:
|
22
|
+
Max: 120
|
23
|
+
|
24
|
+
Metrics/MethodLength:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Metrics/PerceivedComplexity:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Style/ClassAndModuleChildren:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Style/Documentation:
|
34
|
+
Enabled: false
|
35
|
+
|
36
|
+
Style/GuardClause:
|
37
|
+
MinBodyLength: 60
|
38
|
+
|
39
|
+
Style/StringLiterals:
|
40
|
+
EnforcedStyle: double_quotes
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bundler/gem_tasks"
|
2
4
|
require "rake/testtask"
|
5
|
+
require "rubocop/rake_task"
|
3
6
|
|
4
7
|
Rake::TestTask.new do |t|
|
5
8
|
t.libs << "lib"
|
@@ -7,4 +10,6 @@ Rake::TestTask.new do |t|
|
|
7
10
|
t.pattern = "test/**/*_test.rb"
|
8
11
|
end
|
9
12
|
|
10
|
-
|
13
|
+
RuboCop::RakeTask.new
|
14
|
+
|
15
|
+
task default: %i[rubocop test]
|
data/git_diff.gemspec
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
5
|
+
require "git_diff/version"
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
8
|
spec.name = "git_diff"
|
8
9
|
spec.version = GitDiff::VERSION
|
9
10
|
spec.authors = ["Andrew Olson"]
|
10
|
-
spec.email = ["
|
11
|
-
spec.summary =
|
11
|
+
spec.email = ["anolson@gmail.com"]
|
12
|
+
spec.summary = "A Ruby library for parsing git diffs."
|
12
13
|
spec.license = "MIT"
|
13
14
|
|
14
|
-
spec.files = `git ls-files`.split(
|
15
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
15
|
+
spec.files = `git ls-files`.split($RS)
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
-
spec.add_development_dependency "bundler", "~>
|
19
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
20
|
+
spec.add_development_dependency "minitest"
|
20
21
|
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rubocop", "~> 0.74.0"
|
21
23
|
end
|
data/lib/git_diff.rb
CHANGED
data/lib/git_diff/diff.rb
CHANGED
data/lib/git_diff/file.rb
CHANGED
@@ -1,22 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitDiff
|
2
4
|
class File
|
3
|
-
|
4
|
-
attr_reader :a_path, :a_blob, :b_path, :b_blob, :b_mode, :hunks
|
5
|
+
attr_reader :a_path, :a_blob, :b_path, :b_blob, :b_mode, :hunks, :binary
|
5
6
|
|
6
7
|
def self.from_string(string)
|
7
|
-
if
|
8
|
-
File.new
|
8
|
+
if path_info = %r{^diff --git(?: a/(\S+))?(?: b/(\S+))?}.match(string)
|
9
|
+
File.new(
|
10
|
+
a_path: path_info.captures[0] || "/dev/null",
|
11
|
+
b_path: path_info.captures[1] || "/dev/null"
|
12
|
+
)
|
9
13
|
end
|
10
14
|
end
|
11
15
|
|
12
|
-
def initialize
|
16
|
+
def initialize(a_path: "/dev/null", b_path: "/dev/null")
|
13
17
|
@hunks = []
|
18
|
+
@a_path = a_path
|
19
|
+
@b_path = b_path
|
14
20
|
end
|
15
21
|
|
16
22
|
def <<(string)
|
17
23
|
return if extract_diff_meta_data(string)
|
18
24
|
|
19
|
-
if(range_info = RangeInfo.from_string(string))
|
25
|
+
if (range_info = RangeInfo.from_string(string))
|
20
26
|
add_hunk Hunk.new(range_info)
|
21
27
|
else
|
22
28
|
append_to_current_hunk string
|
@@ -38,6 +44,7 @@ module GitDiff
|
|
38
44
|
def add_hunk(hunk)
|
39
45
|
self.current_hunk = hunk
|
40
46
|
hunks << current_hunk
|
47
|
+
@binary = false
|
41
48
|
end
|
42
49
|
|
43
50
|
def append_to_current_hunk(string)
|
@@ -45,21 +52,39 @@ module GitDiff
|
|
45
52
|
end
|
46
53
|
|
47
54
|
def extract_diff_meta_data(string)
|
48
|
-
|
49
|
-
when a_path_info = /^[-]{3} \/dev\/null(.*)$/.match(string)
|
55
|
+
if a_path_info = %r{^[-]{3} /dev/null(.*)$}.match(string)
|
50
56
|
@a_path = "/dev/null"
|
51
|
-
|
57
|
+
elsif a_path_info = %r{^[-]{3} "?a/(.*)$}.match(string)
|
52
58
|
@a_path = a_path_info[1]
|
53
|
-
|
59
|
+
elsif b_path_info = %r{^[+]{3} /dev/null(.*)$}.match(string)
|
54
60
|
@b_path = "/dev/null"
|
55
|
-
|
61
|
+
elsif b_path_info = %r{^[+]{3} "?b/(.*)$}.match(string)
|
56
62
|
@b_path = b_path_info[1]
|
57
|
-
|
63
|
+
elsif blob_info = /^index ([0-9A-Fa-f]+)\.\.([0-9A-Fa-f]+) ?(.+)?$/.match(string)
|
58
64
|
@a_blob, @b_blob, @b_mode = *blob_info.captures
|
59
|
-
|
65
|
+
elsif /^new file mode [0-9]{6}$/.match(string)
|
60
66
|
@a_path = "/dev/null"
|
61
|
-
|
67
|
+
elsif /^deleted file mode [0-9]{6}$/.match(string)
|
62
68
|
@b_path = "/dev/null"
|
69
|
+
elsif 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
|
+
elsif copy_rename_info = /^(copy|rename) (from|to) (.*)$/.match(string)
|
76
|
+
if copy_rename_info.captures[1] == "from"
|
77
|
+
@a_path = copy_rename_info.captures[2]
|
78
|
+
else
|
79
|
+
@b_path = copy_rename_info.captures[2]
|
80
|
+
end
|
81
|
+
elsif binary_info = %r{^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
|
+
elsif /^similarity/.match(string)
|
86
|
+
# trash
|
87
|
+
true
|
63
88
|
end
|
64
89
|
end
|
65
90
|
end
|
data/lib/git_diff/hunk.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "forwardable"
|
2
4
|
|
3
5
|
module GitDiff
|
4
6
|
class Hunk
|
5
|
-
include Enumerable
|
6
|
-
extend Forwardable
|
7
|
-
|
8
|
-
def_delegators :lines, :each
|
9
|
-
|
10
7
|
attr_reader :lines, :range_info
|
11
8
|
|
12
9
|
def initialize(range_info)
|
@@ -39,4 +36,4 @@ module GitDiff
|
|
39
36
|
@line_number_calculation ||= LineNumberCalculation.new(initial_line_number)
|
40
37
|
end
|
41
38
|
end
|
42
|
-
end
|
39
|
+
end
|
data/lib/git_diff/line.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitDiff
|
2
4
|
module Line
|
3
5
|
class Context
|
4
6
|
attr_reader :content, :line_number
|
5
7
|
|
6
|
-
def initialize(content, line_number=nil)
|
8
|
+
def initialize(content, line_number = nil)
|
7
9
|
@content = content
|
8
10
|
@line_number = line_number
|
9
11
|
end
|
data/lib/git_diff/line_number.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitDiff
|
2
4
|
class LineNumberRange
|
3
5
|
attr_reader :start, :number_of_lines
|
@@ -6,7 +8,7 @@ module GitDiff
|
|
6
8
|
new(*string.split(","))
|
7
9
|
end
|
8
10
|
|
9
|
-
def initialize(start = 0, number_of_lines =
|
11
|
+
def initialize(start = 0, number_of_lines = 1)
|
10
12
|
@start = start.to_i
|
11
13
|
@number_of_lines = number_of_lines.to_i
|
12
14
|
end
|
@@ -15,4 +17,4 @@ module GitDiff
|
|
15
17
|
"#{type}#{start},#{number_of_lines}"
|
16
18
|
end
|
17
19
|
end
|
18
|
-
end
|
20
|
+
end
|
data/lib/git_diff/parser.rb
CHANGED
data/lib/git_diff/range_info.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitDiff
|
2
4
|
class RangeInfo
|
3
5
|
attr_reader :original_range, :new_range, :header
|
4
6
|
|
5
7
|
module ClassMethods
|
6
8
|
def from_string(string)
|
7
|
-
if(range_data = extract_hunk_range_data(string))
|
9
|
+
if (range_data = extract_hunk_range_data(string))
|
8
10
|
new(*range_data.captures)
|
9
11
|
end
|
10
12
|
end
|
data/lib/git_diff/stats.rb
CHANGED
data/lib/git_diff/version.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
4
|
|
5
|
+
class DiffFileTest < Minitest::Test
|
5
6
|
def setup
|
6
7
|
@file = GitDiff::File.new
|
7
8
|
end
|
@@ -45,8 +46,8 @@ class DiffFileTest < MiniTest::Unit::TestCase
|
|
45
46
|
@file << " io = StringIO.new(text)"
|
46
47
|
@file << " objects = []"
|
47
48
|
@file << " while line = io.gets"
|
48
|
-
@file << "- sha, type, size = line.split(
|
49
|
-
@file << "+ sha, type, size = line.split(
|
49
|
+
@file << "- sha, type, size = line.split(' ', 3)"
|
50
|
+
@file << "+ sha, type, size = line.split(' ', 3) #wut"
|
50
51
|
@file << " parser = BATCH_PARSERS[type]"
|
51
52
|
@file << " if type == 'missing' || !parser"
|
52
53
|
@file << " io.seek(size.to_i + 1, IO::SEEK_CUR)"
|
@@ -56,5 +57,4 @@ class DiffFileTest < MiniTest::Unit::TestCase
|
|
56
57
|
assert_equal 1, @file.stats.number_of_additions
|
57
58
|
assert_equal 1, @file.stats.number_of_deletions
|
58
59
|
end
|
59
|
-
|
60
|
-
end
|
60
|
+
end
|
data/test/git_diff_test.rb
CHANGED
@@ -1,51 +1,52 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
4
|
|
5
|
+
class GitDiffTest < Minitest::Test
|
5
6
|
def setup
|
6
|
-
string =
|
7
|
-
diff --git a/lib/grit/commit.rb b/lib/grit/commit.rb
|
8
|
-
index 403ea33..dd4b590 100644
|
9
|
-
--- a/lib/grit/commit.rb
|
10
|
-
+++ b/lib/grit/commit.rb
|
11
|
-
@@ -27,6 +27,7 @@
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
+
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
diff --git a/lib/grit/new_file.rb b/lib/grit/new_file.rb
|
20
|
-
new file mode 100644
|
21
|
-
index 0000000..24f83d1
|
22
|
-
--- /dev/null
|
23
|
-
+++ b/lib/grit/new_file.rb
|
24
|
-
@@ -0,0 +1 @@
|
25
|
-
+#
|
26
|
-
diff --git a/grit/old_file.rb b/grit/old_file.rb
|
27
|
-
deleted file mode 100644
|
28
|
-
index ba6b733..0000000
|
29
|
-
--- a/lib/grit/old_file.rb
|
30
|
-
+++ /dev/null
|
31
|
-
@@ -1 +0,0 @@
|
32
|
-
-#
|
33
|
-
diff --git a/lib/grit/repo.rb b/lib/grit/repo.rb
|
34
|
-
index 033b446..0e2d140 100644
|
35
|
-
--- a/lib/grit/repo.rb
|
36
|
-
+++ b/lib/grit/repo.rb
|
37
|
-
@@ -180,7 +180,7 @@ module Grit
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
- sha, type, size = line.split(" ", 3)
|
42
|
-
+ sha, type, size = line.split(" ", 3) #wut
|
43
|
-
|
44
|
-
|
45
|
-
|
7
|
+
string = <<~'DIFF'
|
8
|
+
diff --git a/lib/grit/commit.rb b/lib/grit/commit.rb
|
9
|
+
index 403ea33..dd4b590 100644
|
10
|
+
--- a/lib/grit/commit.rb
|
11
|
+
+++ b/lib/grit/commit.rb
|
12
|
+
@@ -27,6 +27,7 @@
|
13
|
+
|
14
|
+
lines = info.split("\n")
|
15
|
+
tree = lines.shift.split(' ', 2).last
|
16
|
+
+
|
17
|
+
parents = []
|
18
|
+
parents << lines.shift[7..-1] while lines.first[0, 6] == 'parent'
|
19
|
+
author, authored_date = Grit::Commit.actor(lines.shift)
|
20
|
+
diff --git a/lib/grit/new_file.rb b/lib/grit/new_file.rb
|
21
|
+
new file mode 100644
|
22
|
+
index 0000000..24f83d1
|
23
|
+
--- /dev/null
|
24
|
+
+++ b/lib/grit/new_file.rb
|
25
|
+
@@ -0,0 +1 @@
|
26
|
+
+#
|
27
|
+
diff --git a/grit/old_file.rb b/grit/old_file.rb
|
28
|
+
deleted file mode 100644
|
29
|
+
index ba6b733..0000000
|
30
|
+
--- a/lib/grit/old_file.rb
|
31
|
+
+++ /dev/null
|
32
|
+
@@ -1 +0,0 @@
|
33
|
+
-#
|
34
|
+
diff --git a/lib/grit/repo.rb b/lib/grit/repo.rb
|
35
|
+
index 033b446..0e2d140 100644
|
36
|
+
--- a/lib/grit/repo.rb
|
37
|
+
+++ b/lib/grit/repo.rb
|
38
|
+
@@ -180,7 +180,7 @@ module Grit
|
39
|
+
io = StringIO.new(text)
|
40
|
+
objects = []
|
41
|
+
while line = io.gets
|
42
|
+
- sha, type, size = line.split(" ", 3)
|
43
|
+
+ sha, type, size = line.split(" ", 3) #wut
|
44
|
+
parser = BATCH_PARSERS[type]
|
45
|
+
if type == 'missing' || !parser
|
46
|
+
io.seek(size.to_i + 1, IO::SEEK_CUR)
|
46
47
|
DIFF
|
47
48
|
|
48
|
-
@diff = GitDiff
|
49
|
+
@diff = GitDiff.from_string(string)
|
49
50
|
end
|
50
51
|
|
51
52
|
def first_diff_file
|
@@ -108,24 +109,94 @@ index 033b446..0e2d140 100644
|
|
108
109
|
second_hunk = last_diff_file.hunks.first
|
109
110
|
|
110
111
|
assert_equal [
|
111
|
-
[27,27],
|
112
|
-
[28,28],
|
113
|
-
[29,29],
|
114
|
-
[nil,30],
|
115
|
-
[30,31],
|
116
|
-
[31,32],
|
117
|
-
[32,33]
|
118
|
-
|
112
|
+
[27, 27],
|
113
|
+
[28, 28],
|
114
|
+
[29, 29],
|
115
|
+
[nil, 30],
|
116
|
+
[30, 31],
|
117
|
+
[31, 32],
|
118
|
+
[32, 33]
|
119
|
+
], (first_hunk.lines.map { |line| line.line_number.pair })
|
119
120
|
|
120
121
|
assert_equal [
|
121
|
-
[180,180],
|
122
|
-
[181,181],
|
123
|
-
[182,182],
|
124
|
-
[183,nil],
|
125
|
-
[nil,183],
|
126
|
-
[184,184],
|
127
|
-
[185,185],
|
128
|
-
[186,186]
|
129
|
-
|
122
|
+
[180, 180],
|
123
|
+
[181, 181],
|
124
|
+
[182, 182],
|
125
|
+
[183, nil],
|
126
|
+
[nil, 183],
|
127
|
+
[184, 184],
|
128
|
+
[185, 185],
|
129
|
+
[186, 186]
|
130
|
+
], (second_hunk.lines.map { |line| line.line_number.pair })
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_binary_file_diff
|
134
|
+
diff = GitDiff.from_string 'diff --git a/app/assets/bin.eot b/app/assets/bin.eot
|
135
|
+
new file mode 100644
|
136
|
+
index 0000000..2cbab9c
|
137
|
+
Binary files /dev/null and b/app/assets/bin.eot differ'
|
138
|
+
|
139
|
+
refute_nil diff
|
140
|
+
assert_instance_of GitDiff::Diff, diff
|
141
|
+
|
142
|
+
assert_equal 1, diff.files.count
|
143
|
+
file = diff.files[0]
|
144
|
+
|
145
|
+
assert file.binary
|
146
|
+
assert_equal "/dev/null", file.a_path
|
147
|
+
assert_equal "app/assets/bin.eot", file.b_path
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_perm_change_diff
|
151
|
+
diff = GitDiff.from_string 'diff --git a/bin/setup b/bin/setup
|
152
|
+
old mode 100644
|
153
|
+
new mode 100755'
|
154
|
+
|
155
|
+
refute_nil diff
|
156
|
+
assert_instance_of GitDiff::Diff, diff
|
157
|
+
|
158
|
+
assert_equal 1, diff.files.count
|
159
|
+
file = diff.files[0]
|
160
|
+
|
161
|
+
assert_equal 0, file.hunks.count
|
162
|
+
|
163
|
+
assert_equal "bin/setup", file.a_path
|
164
|
+
assert_equal "bin/setup", file.b_path
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_rename_diff
|
168
|
+
diff = GitDiff.from_string 'diff --git a/lib/path1/my_file.rb b/lib/path2/my_file2.rb
|
169
|
+
similarity index 100%
|
170
|
+
rename from lib/path1/my_file.rb
|
171
|
+
rename to lib/path2/my_file2.rb'
|
172
|
+
|
173
|
+
refute_nil diff
|
174
|
+
assert_instance_of GitDiff::Diff, diff
|
175
|
+
|
176
|
+
assert_equal 1, diff.files.count
|
177
|
+
file = diff.files[0]
|
178
|
+
|
179
|
+
assert_equal 0, file.hunks.count
|
180
|
+
|
181
|
+
assert_equal "lib/path1/my_file.rb", file.a_path
|
182
|
+
assert_equal "lib/path2/my_file2.rb", file.b_path
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_copy_diff
|
186
|
+
diff = GitDiff.from_string 'diff --git a/lib/path1/my_file.rb b/lib/path2/my_file2.rb
|
187
|
+
similarity index 100%
|
188
|
+
copy from lib/path1/my_file.rb
|
189
|
+
copy to lib/path2/my_file2.rb'
|
190
|
+
|
191
|
+
refute_nil diff
|
192
|
+
assert_instance_of GitDiff::Diff, diff
|
193
|
+
|
194
|
+
assert_equal 1, diff.files.count
|
195
|
+
file = diff.files[0]
|
196
|
+
|
197
|
+
assert_equal 0, file.hunks.count
|
198
|
+
|
199
|
+
assert_equal "lib/path1/my_file.rb", file.a_path
|
200
|
+
assert_equal "lib/path2/my_file2.rb", file.b_path
|
130
201
|
end
|
131
202
|
end
|
data/test/hunk_test.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
4
|
|
5
|
+
class HunkTest < Minitest::Test
|
5
6
|
def setup
|
6
7
|
@range_info = GitDiff::RangeInfo.new("180,7", "180,7", "module Grit")
|
7
8
|
@hunk = GitDiff::Hunk.new(@range_info)
|
@@ -24,4 +25,4 @@ class HunkTest < MiniTest::Unit::TestCase
|
|
24
25
|
|
25
26
|
assert_equal 1, @hunk.stats.number_of_deletions
|
26
27
|
end
|
27
|
-
end
|
28
|
+
end
|
data/test/line/addition_test.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
|
3
|
-
class AdditionTest <
|
5
|
+
class AdditionTest < Minitest::Test
|
4
6
|
def setup
|
5
7
|
@addition = GitDiff::Line::Addition.new("+ addition")
|
6
8
|
end
|
@@ -12,4 +14,4 @@ class AdditionTest < MiniTest::Unit::TestCase
|
|
12
14
|
def test_deletion_is_false
|
13
15
|
refute @addition.deletion?
|
14
16
|
end
|
15
|
-
end
|
17
|
+
end
|
data/test/line/context_test.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
|
3
|
-
class ContextTest <
|
5
|
+
class ContextTest < Minitest::Test
|
4
6
|
def setup
|
5
|
-
@line_number = GitDiff::LineNumber.new(0,0)
|
7
|
+
@line_number = GitDiff::LineNumber.new(0, 0)
|
6
8
|
@content = "some content"
|
7
9
|
@context = GitDiff::Line::Context.new(@content, @line_number)
|
8
10
|
end
|
@@ -18,4 +20,4 @@ class ContextTest < MiniTest::Unit::TestCase
|
|
18
20
|
def test_to_s_returns_the_content
|
19
21
|
assert_equal @content, @context.to_s
|
20
22
|
end
|
21
|
-
end
|
23
|
+
end
|
data/test/line/deletion_test.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
|
3
|
-
class DeletionTest <
|
5
|
+
class DeletionTest < Minitest::Test
|
4
6
|
def setup
|
5
7
|
@deletion = GitDiff::Line::Deletion.new("- deletion")
|
6
8
|
end
|
@@ -12,4 +14,4 @@ class DeletionTest < MiniTest::Unit::TestCase
|
|
12
14
|
def test_deletion_is_true
|
13
15
|
assert @deletion.deletion?
|
14
16
|
end
|
15
|
-
end
|
17
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
4
|
|
5
|
+
class LineNumberCalculationTest < Minitest::Test
|
5
6
|
def setup
|
6
7
|
@line_number = GitDiff::LineNumber.new(0, 0)
|
7
8
|
@line_number_calculation = GitDiff::LineNumberCalculation.new(@line_number)
|
@@ -31,4 +32,4 @@ class LineNumberCalculationTest < MiniTest::Unit::TestCase
|
|
31
32
|
assert_equal 1, @line_number_calculation.current.left
|
32
33
|
assert_equal 1, @line_number_calculation.current.right
|
33
34
|
end
|
34
|
-
end
|
35
|
+
end
|
@@ -1,24 +1,32 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
4
|
|
5
|
+
class LineNumberRangeTest < Minitest::Test
|
5
6
|
def test_from_string_with_empty_string
|
6
7
|
range = GitDiff::LineNumberRange.from_string("")
|
7
8
|
|
8
9
|
assert_equal 0, range.start
|
9
|
-
assert_equal
|
10
|
+
assert_equal 1, range.number_of_lines
|
10
11
|
end
|
11
12
|
|
12
|
-
def
|
13
|
+
def test_from_string_with_not_empty_string
|
13
14
|
range = GitDiff::LineNumberRange.from_string("180,7")
|
14
15
|
|
15
16
|
assert_equal 180, range.start
|
16
17
|
assert_equal 7, range.number_of_lines
|
17
18
|
end
|
18
19
|
|
20
|
+
def test_from_string_with_start_no_count
|
21
|
+
range = GitDiff::LineNumberRange.from_string("180")
|
22
|
+
|
23
|
+
assert_equal 180, range.start
|
24
|
+
assert_equal 1, range.number_of_lines
|
25
|
+
end
|
26
|
+
|
19
27
|
def test_to_s
|
20
28
|
range = GitDiff::LineNumberRange.from_string("180,7")
|
21
29
|
|
22
30
|
assert_equal "+180,7", range.to_s(:+)
|
23
31
|
end
|
24
|
-
end
|
32
|
+
end
|
data/test/line_number_test.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
4
|
|
5
|
+
class LineNumberTest < Minitest::Test
|
5
6
|
def setup
|
6
|
-
@line_number = GitDiff::LineNumber.new(0,0)
|
7
|
+
@line_number = GitDiff::LineNumber.new(0, 0)
|
7
8
|
end
|
8
9
|
|
9
10
|
def test_increment_left
|
@@ -25,6 +26,6 @@ class LineNumberTest < MiniTest::Unit::TestCase
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def test_pair
|
28
|
-
assert_equal [0,0], @line_number.pair
|
29
|
+
assert_equal [0, 0], @line_number.pair
|
29
30
|
end
|
30
|
-
end
|
31
|
+
end
|
data/test/line_test.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
4
|
|
5
|
+
class LineTest < Minitest::Test
|
5
6
|
def setup
|
6
7
|
@line_number = GitDiff::LineNumber.new(0, 0)
|
7
8
|
end
|
8
9
|
|
9
|
-
|
10
10
|
def test_from_string_with_addition
|
11
11
|
addition = GitDiff::Line.from_string("+ addition")
|
12
12
|
|
@@ -27,4 +27,4 @@ class LineTest < MiniTest::Unit::TestCase
|
|
27
27
|
refute_nil context
|
28
28
|
assert_instance_of GitDiff::Line::Context, context
|
29
29
|
end
|
30
|
-
end
|
30
|
+
end
|
data/test/range_info_test.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
|
3
5
|
class Collector
|
4
|
-
|
5
6
|
def collect
|
6
7
|
GitDiff::Stats.new(
|
7
8
|
number_of_lines: number_of_lines,
|
@@ -25,7 +26,7 @@ class Collector
|
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
|
-
class StatsCalculatorTest <
|
29
|
+
class StatsCalculatorTest < Minitest::Test
|
29
30
|
def setup
|
30
31
|
collector = Collector.new
|
31
32
|
|
@@ -44,4 +45,4 @@ class StatsCalculatorTest < MiniTest::Unit::TestCase
|
|
44
45
|
def test_total_number_additions_is_the_sum_of_all_the_lines
|
45
46
|
assert_equal 24, @stats.number_of_lines
|
46
47
|
end
|
47
|
-
end
|
48
|
+
end
|
data/test/test_helper.rb
CHANGED
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.3
|
4
|
+
version: 0.4.3
|
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: 2021-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,17 +52,31 @@ dependencies:
|
|
38
52
|
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.74.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.74.0
|
41
69
|
description:
|
42
70
|
email:
|
43
|
-
-
|
71
|
+
- anolson@gmail.com
|
44
72
|
executables: []
|
45
73
|
extensions: []
|
46
74
|
extra_rdoc_files: []
|
47
75
|
files:
|
48
76
|
- ".gitignore"
|
77
|
+
- ".rubocop.yml"
|
49
78
|
- ".travis.yml"
|
50
79
|
- Gemfile
|
51
|
-
- Gemfile.lock
|
52
80
|
- LICENSE.txt
|
53
81
|
- README.md
|
54
82
|
- Rakefile
|
@@ -73,7 +101,7 @@ files:
|
|
73
101
|
- lib/git_diff/stats_collector/rollup.rb
|
74
102
|
- lib/git_diff/stats_rollup.rb
|
75
103
|
- lib/git_diff/version.rb
|
76
|
-
- test/
|
104
|
+
- test/file_test.rb
|
77
105
|
- test/git_diff_test.rb
|
78
106
|
- test/hunk_test.rb
|
79
107
|
- test/line/addition_test.rb
|
@@ -105,13 +133,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
133
|
- !ruby/object:Gem::Version
|
106
134
|
version: '0'
|
107
135
|
requirements: []
|
108
|
-
|
109
|
-
rubygems_version: 2.2.2
|
136
|
+
rubygems_version: 3.0.3
|
110
137
|
signing_key:
|
111
138
|
specification_version: 4
|
112
139
|
summary: A Ruby library for parsing git diffs.
|
113
140
|
test_files:
|
114
|
-
- test/
|
141
|
+
- test/file_test.rb
|
115
142
|
- test/git_diff_test.rb
|
116
143
|
- test/hunk_test.rb
|
117
144
|
- test/line/addition_test.rb
|
@@ -124,4 +151,3 @@ test_files:
|
|
124
151
|
- test/range_info_test.rb
|
125
152
|
- test/stats_calculator_test.rb
|
126
153
|
- test/test_helper.rb
|
127
|
-
has_rdoc:
|