gitlab_git 8.2.0 → 9.0.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/VERSION +1 -1
- data/lib/gitlab_git.rb +2 -0
- data/lib/gitlab_git/commit.rb +1 -1
- data/lib/gitlab_git/compare.rb +6 -24
- data/lib/gitlab_git/diff.rb +6 -1
- data/lib/gitlab_git/diff_collection.rb +90 -0
- data/lib/gitlab_git/repository.rb +1 -3
- data/lib/gitlab_git/util.rb +18 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e997dc18170db77f9b2ffad597f0cc1654f457a8
|
4
|
+
data.tar.gz: d557e66cdbaa42781d0ad422c91d969cb1a91af6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc478f222265b20bb57a26ec2f85f75863dd5f89a61cba9a9299c999e853a8a69896bcbeec880570f9c69a19fcf04b9285e87242c78519b384b05e3dbe68dd68
|
7
|
+
data.tar.gz: 753dec7e037607af0ceaf47dd260d061f8799d0b5fd0eab598a048b1765de44e3217ed8f9e0f9041d49dc1c864762b6373dbba4c74213199e5d3ec714fdeba99
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
9.0.0
|
data/lib/gitlab_git.rb
CHANGED
@@ -17,9 +17,11 @@ require_relative "gitlab_git/commit"
|
|
17
17
|
require_relative "gitlab_git/commit_stats"
|
18
18
|
require_relative "gitlab_git/compare"
|
19
19
|
require_relative "gitlab_git/diff"
|
20
|
+
require_relative "gitlab_git/diff_collection"
|
20
21
|
require_relative "gitlab_git/repository"
|
21
22
|
require_relative "gitlab_git/tree"
|
22
23
|
require_relative "gitlab_git/blob_snippet"
|
23
24
|
require_relative "gitlab_git/ref"
|
24
25
|
require_relative "gitlab_git/branch"
|
25
26
|
require_relative "gitlab_git/tag"
|
27
|
+
require_relative "gitlab_git/util"
|
data/lib/gitlab_git/commit.rb
CHANGED
data/lib/gitlab_git/compare.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
module Gitlab
|
2
2
|
module Git
|
3
3
|
class Compare
|
4
|
-
attr_reader :commits, :
|
4
|
+
attr_reader :commits, :same, :head, :base
|
5
5
|
|
6
6
|
def initialize(repository, base, head)
|
7
|
-
@commits
|
7
|
+
@commits = []
|
8
8
|
@same = false
|
9
9
|
@repository = repository
|
10
|
-
@timeout = false
|
11
10
|
|
12
11
|
return unless base && head
|
13
12
|
|
@@ -24,30 +23,13 @@ module Gitlab
|
|
24
23
|
@commits = Gitlab::Git::Commit.between(repository, @base.id, @head.id)
|
25
24
|
end
|
26
25
|
|
27
|
-
def diffs(
|
26
|
+
def diffs(options = {})
|
28
27
|
unless @head && @base
|
29
|
-
return []
|
28
|
+
return Gitlab::Git::DiffCollection.new([])
|
30
29
|
end
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
if @diffs.empty? && @timeout == false
|
35
|
-
begin
|
36
|
-
@diffs = Gitlab::Git::Diff.between(@repository, @head.id, @base.id,
|
37
|
-
options, *paths)
|
38
|
-
rescue Gitlab::Git::Diff::TimeoutError => ex
|
39
|
-
@diffs = []
|
40
|
-
@timeout = true
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
@diffs
|
45
|
-
end
|
46
|
-
|
47
|
-
# Check if diff is empty because it is actually empty
|
48
|
-
# and not because its impossible to get it
|
49
|
-
def empty_diff?
|
50
|
-
diffs.empty? && timeout == false
|
31
|
+
paths = options.delete(:paths) || []
|
32
|
+
Gitlab::Git::Diff.between(@repository, @head.id, @base.id, options, *paths)
|
51
33
|
end
|
52
34
|
end
|
53
35
|
end
|
data/lib/gitlab_git/diff.rb
CHANGED
@@ -130,7 +130,8 @@ module Gitlab
|
|
130
130
|
:disable_pathspec_match, :deltas_are_icase,
|
131
131
|
:include_untracked_content, :skip_binary_check,
|
132
132
|
:include_typechange, :include_typechange_trees,
|
133
|
-
:ignore_filemode, :recurse_ignored_dirs, :paths
|
133
|
+
:ignore_filemode, :recurse_ignored_dirs, :paths,
|
134
|
+
:max_files, :max_lines, :all_diffs]
|
134
135
|
|
135
136
|
if default_options
|
136
137
|
actual_defaults = default_options.dup
|
@@ -187,6 +188,10 @@ module Gitlab
|
|
187
188
|
a_mode == '160000' || b_mode == '160000'
|
188
189
|
end
|
189
190
|
|
191
|
+
def line_count
|
192
|
+
@line_count ||= Util.count_lines(@diff)
|
193
|
+
end
|
194
|
+
|
190
195
|
private
|
191
196
|
|
192
197
|
def init_from_rugged(rugged)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Gitlab
|
2
|
+
module Git
|
3
|
+
class DiffCollection
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
DEFAULT_LIMITS = { max_files: 100, max_lines: 5000 }.freeze
|
7
|
+
|
8
|
+
def initialize(iterator, options={})
|
9
|
+
@iterator = iterator
|
10
|
+
@max_files = options.fetch(:max_files, DEFAULT_LIMITS[:max_files])
|
11
|
+
@max_lines = options.fetch(:max_lines, DEFAULT_LIMITS[:max_lines])
|
12
|
+
@all_diffs = !!options.fetch(:all_diffs, false)
|
13
|
+
|
14
|
+
@line_count = 0
|
15
|
+
@overflow = false
|
16
|
+
@array = Array.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def each
|
20
|
+
@iterator.each_with_index do |raw, i|
|
21
|
+
# First yield cached Diff instances from @array
|
22
|
+
if @array[i]
|
23
|
+
yield @array[i]
|
24
|
+
next
|
25
|
+
end
|
26
|
+
|
27
|
+
# We have exhausted @array, time to create new Diff instances or stop.
|
28
|
+
break if @overflow
|
29
|
+
|
30
|
+
if !@all_diffs && i >= @max_files
|
31
|
+
@overflow = true
|
32
|
+
break
|
33
|
+
end
|
34
|
+
|
35
|
+
# Going by the number of files alone it is OK to create a new Diff instance.
|
36
|
+
diff = Gitlab::Git::Diff.new(raw)
|
37
|
+
|
38
|
+
@line_count += diff.line_count
|
39
|
+
if !@all_diffs && @line_count >= @max_lines
|
40
|
+
# This last Diff instance pushes us over the lines limit. We stop and
|
41
|
+
# discard it.
|
42
|
+
@overflow = true
|
43
|
+
break
|
44
|
+
end
|
45
|
+
|
46
|
+
yield @array[i] = diff
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def empty?
|
51
|
+
!@iterator.any?
|
52
|
+
end
|
53
|
+
|
54
|
+
def overflow?
|
55
|
+
populate!
|
56
|
+
!!@overflow
|
57
|
+
end
|
58
|
+
|
59
|
+
def size
|
60
|
+
@size ||= count # forces a loop through @iterator
|
61
|
+
end
|
62
|
+
|
63
|
+
def real_size
|
64
|
+
populate!
|
65
|
+
|
66
|
+
if @overflow
|
67
|
+
"#{size}+"
|
68
|
+
else
|
69
|
+
size.to_s
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def decorate!
|
74
|
+
each_with_index do |element, i|
|
75
|
+
@array[i] = yield(element)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def populate!
|
82
|
+
return if @populated
|
83
|
+
|
84
|
+
each { nil } # force a loop through all diffs
|
85
|
+
@populated = true
|
86
|
+
nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -320,9 +320,7 @@ module Gitlab
|
|
320
320
|
# diff options. The +options+ hash can also include :break_rewrites to
|
321
321
|
# split larger rewrites into delete/add pairs.
|
322
322
|
def diff(from, to, options = {}, *paths)
|
323
|
-
diff_patches(from, to, options, *paths)
|
324
|
-
Gitlab::Git::Diff.new(p)
|
325
|
-
end
|
323
|
+
DiffCollection.new(diff_patches(from, to, options, *paths), options)
|
326
324
|
end
|
327
325
|
|
328
326
|
# Return the diff between +from+ and +to+ in a single patch string. The
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab_git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 9.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitriy Zaporozhets
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: github-linguist
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/gitlab_git/commit_stats.rb
|
83
83
|
- lib/gitlab_git/compare.rb
|
84
84
|
- lib/gitlab_git/diff.rb
|
85
|
+
- lib/gitlab_git/diff_collection.rb
|
85
86
|
- lib/gitlab_git/encoding_helper.rb
|
86
87
|
- lib/gitlab_git/path_helper.rb
|
87
88
|
- lib/gitlab_git/popen.rb
|
@@ -89,6 +90,7 @@ files:
|
|
89
90
|
- lib/gitlab_git/repository.rb
|
90
91
|
- lib/gitlab_git/tag.rb
|
91
92
|
- lib/gitlab_git/tree.rb
|
93
|
+
- lib/gitlab_git/util.rb
|
92
94
|
homepage: http://rubygems.org/gems/gitlab_git
|
93
95
|
licenses:
|
94
96
|
- MIT
|
@@ -109,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
111
|
version: '0'
|
110
112
|
requirements: []
|
111
113
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.
|
114
|
+
rubygems_version: 2.2.5
|
113
115
|
signing_key:
|
114
116
|
specification_version: 4
|
115
117
|
summary: Gitlab::Git library
|