diff_parser 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/diff_parser.rb +0 -7
- data/lib/diff_parser/commit.rb +2 -2
- data/lib/diff_parser/diff.rb +13 -5
- data/lib/diff_parser/diff_files_collection.rb +5 -5
- data/lib/diff_parser/file.rb +3 -25
- data/lib/diff_parser/raw_line.rb +21 -21
- data/lib/diff_parser/version.rb +1 -1
- metadata +2 -3
- data/lib/diff_parser/inline_diff.rb +0 -78
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODhkM2ZjNDJhMjJkZjg3N2ZiN2YzYWU0MjA3YTEwMDM3NTVmZDlkYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDA4ZGRiMmYzODM2NTZlNzE2MDNjY2ExYWQ2ZDIxNzBkMDUzM2MwNA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGNlY2E0YWI2Yzk1N2VjYjcwNjFjN2FkOGM5YzU3NDhlMGVkMjk0OTNmODgz
|
10
|
+
ODFmZjJkYzA0YTY1MzljZTE0MzcyYzhmMDc5YzMxMmVmM2RiMmJjNGNiOGVk
|
11
|
+
MWMyZjUzMjQ1NDRmZTc5Yzc3Yzc3ZGVkOWNhMDk5ZmNiYmE1M2I=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NWY5ODI1NjY2OWJlYzFlNTQ2MmIyMjJmYTBkYThhMWEzYjYxNTRjZWYwNmY3
|
14
|
+
ZGVlNDFlNTExMjk4MTEyZWNlZjM2MTIwZDE5MWQxN2NjZmM2MDFlYTA1NGE4
|
15
|
+
OTlhZmI3Y2MyNDRjZjMzMjEzNTgzNTg3MjJkNjdlM2U5OTI4MTY=
|
data/lib/diff_parser.rb
CHANGED
@@ -4,18 +4,11 @@ require 'diff_parser/file'
|
|
4
4
|
require 'diff_parser/diff_files_collection'
|
5
5
|
require 'diff_parser/raw_line'
|
6
6
|
require 'diff_parser/diff_line'
|
7
|
-
require 'diff_parser/inline_diff'
|
8
7
|
|
9
8
|
module DiffParser
|
10
9
|
mattr_accessor :max_changes_to_render
|
11
10
|
@@max_changes_to_render = 500
|
12
11
|
|
13
|
-
mattr_accessor :reduced_max_changes_to_render
|
14
|
-
@@reduced_max_changes_to_render = 10
|
15
|
-
|
16
|
-
mattr_accessor :changes_reduction_threshold
|
17
|
-
@@changes_reduction_threshold = 20
|
18
|
-
|
19
12
|
def self.setup
|
20
13
|
yield self
|
21
14
|
end
|
data/lib/diff_parser/commit.rb
CHANGED
data/lib/diff_parser/diff.rb
CHANGED
@@ -1,16 +1,24 @@
|
|
1
1
|
module DiffParser
|
2
2
|
class Diff
|
3
|
-
attr_reader :raw, :info, :commit
|
3
|
+
attr_reader :raw, :info, :commit, :options
|
4
4
|
delegate :github, :repo, :sha, to: :commit
|
5
5
|
|
6
|
-
def initialize(commit)
|
6
|
+
def initialize(commit, options)
|
7
7
|
@commit = commit
|
8
|
-
@
|
9
|
-
@
|
8
|
+
@options = options
|
9
|
+
@info = github.commit(repo, sha)
|
10
|
+
|
11
|
+
@raw = Rails.cache.fetch(diff_cache_key) do
|
12
|
+
github.commit(repo, sha, accept: 'application/vnd.github.VERSION.diff')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def diff_cache_key
|
17
|
+
"diff-#{repo}-#{sha}"
|
10
18
|
end
|
11
19
|
|
12
20
|
def files
|
13
|
-
DiffParser::DiffFilesCollection.new(self)
|
21
|
+
DiffParser::DiffFilesCollection.new(self, options)
|
14
22
|
end
|
15
23
|
end
|
16
24
|
end
|
@@ -2,15 +2,15 @@ module DiffParser
|
|
2
2
|
class DiffFilesCollection
|
3
3
|
include Enumerable
|
4
4
|
|
5
|
-
attr_reader :diff
|
5
|
+
attr_reader :diff, :options
|
6
6
|
|
7
|
-
def initialize(diff)
|
7
|
+
def initialize(diff, options)
|
8
|
+
@options = options
|
8
9
|
@diff = diff
|
9
10
|
end
|
10
11
|
|
11
12
|
def raw_lines
|
12
|
-
|
13
|
-
preprocessed_lines.map { |line| RawLine.new(line) }
|
13
|
+
diff.raw.lines.map { |line| RawLine.new(line) }
|
14
14
|
end
|
15
15
|
|
16
16
|
def each
|
@@ -22,7 +22,7 @@ module DiffParser
|
|
22
22
|
if raw_line.info?
|
23
23
|
yield current_file if current_file
|
24
24
|
current_file = DiffParser::File.new(raw_line.full_line, diff)
|
25
|
-
elsif !current_file.folded?
|
25
|
+
elsif options[:full] == current_file.path || options[:full] == true || !current_file.folded?
|
26
26
|
current_file.push_line(raw_line, idx)
|
27
27
|
end
|
28
28
|
end
|
data/lib/diff_parser/file.rb
CHANGED
@@ -35,19 +35,13 @@ module DiffParser
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def each_line
|
39
|
-
lines.each do |line|
|
40
|
-
yield line
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
38
|
def sha
|
45
39
|
diff.sha
|
46
40
|
end
|
47
41
|
|
48
42
|
def folded?
|
49
|
-
@folded ||= if
|
50
|
-
lines << DiffLine.new(
|
43
|
+
@folded ||= if file_max_changes_exceeded?
|
44
|
+
lines << DiffLine.new(path, 'fold', nil, nil, 0, nil)
|
51
45
|
true
|
52
46
|
else
|
53
47
|
false
|
@@ -56,24 +50,8 @@ module DiffParser
|
|
56
50
|
|
57
51
|
private
|
58
52
|
|
59
|
-
def max_changes_to_render
|
60
|
-
if diff.info.files.count > DiffParser.changes_reduction_threshold
|
61
|
-
DiffParser.reduced_max_changes_to_render
|
62
|
-
else
|
63
|
-
DiffParser.max_changes_to_render
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
53
|
def file_max_changes_exceeded?
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
def added?
|
72
|
-
file_info.status == 'added'
|
73
|
-
end
|
74
|
-
|
75
|
-
def removed?
|
76
|
-
file_info.status == 'removed'
|
54
|
+
!file_info || (file_info.changes > DiffParser.max_changes_to_render)
|
77
55
|
end
|
78
56
|
|
79
57
|
def preprocess_path(path)
|
data/lib/diff_parser/raw_line.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
module DiffParser
|
2
2
|
class RawLine
|
3
|
-
GIT_NEW_FILE =
|
4
|
-
GIT_DELETED_FILE =
|
5
|
-
GIT_DIFF_START =
|
6
|
-
GIT_DIFF_FINISH =
|
7
|
-
GIT_INDEX =
|
8
|
-
GIT_DIFF =
|
9
|
-
GIT_WARN_NEW_LINE =
|
10
|
-
GIT_CODE_ADDED =
|
11
|
-
GIT_CODE_REMOVED =
|
3
|
+
GIT_NEW_FILE = 'new file'
|
4
|
+
GIT_DELETED_FILE = 'deleted file'
|
5
|
+
GIT_DIFF_START = '+#!idiff-start!#++'
|
6
|
+
GIT_DIFF_FINISH = '-#!idiff-start!#--'
|
7
|
+
GIT_INDEX = 'index '
|
8
|
+
GIT_DIFF = 'diff --git '
|
9
|
+
GIT_WARN_NEW_LINE = ' No newline at end of file'
|
10
|
+
GIT_CODE_ADDED = '+'
|
11
|
+
GIT_CODE_REMOVED = '-'
|
12
12
|
|
13
13
|
SUMMARY_REGEXES = [/^\-\-\- \/dev\/null/,
|
14
14
|
/^\+\+\+ \/dev\/null/,
|
@@ -22,7 +22,7 @@ module DiffParser
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def full_line
|
25
|
-
@full_line ||=
|
25
|
+
@full_line ||= html_escape(line.gsub(/\n/, ''))
|
26
26
|
end
|
27
27
|
|
28
28
|
def summary?
|
@@ -53,27 +53,27 @@ module DiffParser
|
|
53
53
|
|
54
54
|
def type
|
55
55
|
if stripped_line.match(/^@@ -/)
|
56
|
-
|
56
|
+
'match'
|
57
57
|
elsif stripped_line.start_with? GIT_NEW_FILE
|
58
|
-
|
58
|
+
'file_created'
|
59
59
|
elsif stripped_line.start_with? GIT_DELETED_FILE
|
60
|
-
|
60
|
+
'file_removed'
|
61
61
|
elsif stripped_line.start_with? GIT_DIFF_START
|
62
|
-
|
62
|
+
'file_update_created'
|
63
63
|
elsif stripped_line.start_with? GIT_DIFF_FINISH
|
64
|
-
|
64
|
+
'file_update_removed'
|
65
65
|
elsif stripped_line.start_with? GIT_INDEX
|
66
|
-
|
66
|
+
'index'
|
67
67
|
elsif stripped_line.start_with? GIT_DIFF
|
68
|
-
|
68
|
+
'info'
|
69
69
|
elsif stripped_line.start_with? GIT_WARN_NEW_LINE
|
70
|
-
|
70
|
+
'warning'
|
71
71
|
elsif stripped_line.start_with? GIT_CODE_ADDED
|
72
|
-
|
72
|
+
'new'
|
73
73
|
elsif stripped_line[0] == GIT_CODE_REMOVED
|
74
|
-
|
74
|
+
'old'
|
75
75
|
else
|
76
|
-
|
76
|
+
'default'
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
data/lib/diff_parser/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diff_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- stevo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Allows parsing diffs for presentation purposes - extracted from marvelous
|
14
14
|
GitLab project
|
@@ -24,7 +24,6 @@ files:
|
|
24
24
|
- lib/diff_parser/diff_files_collection.rb
|
25
25
|
- lib/diff_parser/diff_line.rb
|
26
26
|
- lib/diff_parser/file.rb
|
27
|
-
- lib/diff_parser/inline_diff.rb
|
28
27
|
- lib/diff_parser/raw_line.rb
|
29
28
|
- lib/diff_parser/version.rb
|
30
29
|
homepage: https://github.com/Selleo/diff_parser
|
@@ -1,78 +0,0 @@
|
|
1
|
-
module DiffParser
|
2
|
-
module InlineDiff
|
3
|
-
class << self
|
4
|
-
|
5
|
-
START = "#!idiff-start!#"
|
6
|
-
FINISH = "#!idiff-finish!#"
|
7
|
-
|
8
|
-
def processing diff_arr
|
9
|
-
indexes = _indexes_of_changed_lines diff_arr
|
10
|
-
|
11
|
-
indexes.each do |index|
|
12
|
-
first_line = diff_arr[index+1]
|
13
|
-
second_line = diff_arr[index+2]
|
14
|
-
max_length = [first_line.size, second_line.size].max
|
15
|
-
|
16
|
-
# Skip inline diff if empty line was replaced with content
|
17
|
-
next if first_line == "-\n"
|
18
|
-
|
19
|
-
first_the_same_symbols = 0
|
20
|
-
(0..max_length + 1).each do |i|
|
21
|
-
first_the_same_symbols = i - 1
|
22
|
-
if first_line[i] != second_line[i] && i > 0
|
23
|
-
break
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
first_token = first_line[0..first_the_same_symbols][1..-1]
|
28
|
-
start = first_token + START
|
29
|
-
|
30
|
-
if first_token.empty?
|
31
|
-
# In case if we remove string of spaces in commit
|
32
|
-
diff_arr[index+1].sub!("-", "-" => "-#{START}")
|
33
|
-
diff_arr[index+2].sub!("+", "+" => "+#{START}")
|
34
|
-
else
|
35
|
-
diff_arr[index+1].sub!(first_token, first_token => start)
|
36
|
-
diff_arr[index+2].sub!(first_token, first_token => start)
|
37
|
-
end
|
38
|
-
|
39
|
-
last_the_same_symbols = 0
|
40
|
-
(1..max_length + 1).each do |i|
|
41
|
-
last_the_same_symbols = -i
|
42
|
-
shortest_line = second_line.size > first_line.size ? first_line : second_line
|
43
|
-
if (first_line[-i] != second_line[-i]) || "#{first_token}#{START}".size == shortest_line[1..-i].size
|
44
|
-
break
|
45
|
-
end
|
46
|
-
end
|
47
|
-
last_the_same_symbols += 1
|
48
|
-
last_token = first_line[last_the_same_symbols..-1]
|
49
|
-
diff_arr[index+1].sub!(/#{Regexp.escape(last_token)}$/, FINISH + last_token)
|
50
|
-
diff_arr[index+2].sub!(/#{Regexp.escape(last_token)}$/, FINISH + last_token)
|
51
|
-
end
|
52
|
-
diff_arr
|
53
|
-
end
|
54
|
-
|
55
|
-
def _indexes_of_changed_lines diff_arr
|
56
|
-
chain_of_first_symbols = ""
|
57
|
-
diff_arr.each_with_index do |line, i|
|
58
|
-
chain_of_first_symbols += line[0]
|
59
|
-
end
|
60
|
-
chain_of_first_symbols.gsub!(/[^\-\+]/, "#")
|
61
|
-
|
62
|
-
offset = 0
|
63
|
-
indexes = []
|
64
|
-
while index = chain_of_first_symbols.index("#-+#", offset)
|
65
|
-
indexes << index
|
66
|
-
offset = index + 1
|
67
|
-
end
|
68
|
-
indexes
|
69
|
-
end
|
70
|
-
|
71
|
-
def replace_markers line
|
72
|
-
line.gsub!(START, "<span class='idiff'>")
|
73
|
-
line.gsub!(FINISH, "</span>")
|
74
|
-
line
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|