git_diff 0.3.0 → 0.4.3
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 +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:
|