gitlab_git 2.0.1 → 2.1.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/gitlab_git/commit.rb +23 -0
- data/lib/gitlab_git/git_stats.rb +3 -3
- data/lib/gitlab_git/repository.rb +90 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f61306b02ce00f09ae58472e5d486e4ed676388
|
4
|
+
data.tar.gz: 823cea793f9f714ea3b2a9459a7119ad5d80ad40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f42e53e6b8662cd00f839539348033ca9437cf15b2e3b144542502a38f3aeda9b42d7074b853604a3b4201999e6440e1859e46c890491bdafef044e6e8214a5c
|
7
|
+
data.tar.gz: 1a17eb07cc61c26c005940c308d77b3ed2987e82c4b0109727e7b7576d39d5dce15247cb183ce414e19f6d3966939ea48dba6b43d08b501702b2288806144518
|
data/lib/gitlab_git/commit.rb
CHANGED
@@ -91,6 +91,11 @@ module Gitlab
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
+
# Delegate Repository#find_commits
|
95
|
+
def find_all(repo, options = {})
|
96
|
+
repo.find_commits(options)
|
97
|
+
end
|
98
|
+
|
94
99
|
def decorate(commit, ref = nil)
|
95
100
|
Gitlab::Git::Commit.new(commit, ref)
|
96
101
|
end
|
@@ -190,6 +195,24 @@ module Gitlab
|
|
190
195
|
raw_commit.to_patch
|
191
196
|
end
|
192
197
|
|
198
|
+
# Get refs collection(Grit::Head or Grit::Remote or Grit::Tag)
|
199
|
+
#
|
200
|
+
# Ex.
|
201
|
+
# commit.ref(repo)
|
202
|
+
#
|
203
|
+
def refs(repo)
|
204
|
+
repo.refs_hash[id]
|
205
|
+
end
|
206
|
+
|
207
|
+
# Get ref names collection
|
208
|
+
#
|
209
|
+
# Ex.
|
210
|
+
# commit.ref_names(repo)
|
211
|
+
#
|
212
|
+
def ref_names(repo)
|
213
|
+
refs(repo).map(&:name)
|
214
|
+
end
|
215
|
+
|
193
216
|
private
|
194
217
|
|
195
218
|
def init_from_grit(grit)
|
data/lib/gitlab_git/git_stats.rb
CHANGED
@@ -11,9 +11,9 @@ module Gitlab
|
|
11
11
|
|
12
12
|
def log
|
13
13
|
log = nil
|
14
|
-
Grit::Git.with_timeout(
|
15
|
-
# Limit log to
|
16
|
-
args = ['-
|
14
|
+
Grit::Git.with_timeout(30) do
|
15
|
+
# Limit log to 6k commits to avoid timeout for huge projects
|
16
|
+
args = ['-6000', '--format=%aN%x0a%aE%x0a%cd', '--date=short', '--shortstat', '--no-merges']
|
17
17
|
log = repo.git.run(nil, 'log', nil, {}, args)
|
18
18
|
end
|
19
19
|
|
@@ -199,6 +199,96 @@ module Gitlab
|
|
199
199
|
def diff(from, to)
|
200
200
|
raw.diff(from, to)
|
201
201
|
end
|
202
|
+
|
203
|
+
# Returns commits collection
|
204
|
+
#
|
205
|
+
# Ex.
|
206
|
+
# repo.find_commits(
|
207
|
+
# ref: 'master',
|
208
|
+
# max_count: 10,
|
209
|
+
# skip: 5,
|
210
|
+
# order: :date
|
211
|
+
# )
|
212
|
+
#
|
213
|
+
# +options+ is a Hash of optional arguments to git
|
214
|
+
# :ref is the ref from which to begin (SHA1 or name)
|
215
|
+
# :contains is the commit contained by the refs from which to begin (SHA1 or name)
|
216
|
+
# :max_count is the maximum number of commits to fetch
|
217
|
+
# :skip is the number of commits to skip
|
218
|
+
# :order is the commits order and allowed value is :date(default) or :topo
|
219
|
+
#
|
220
|
+
def find_commits(options = {})
|
221
|
+
actual_options = options.dup
|
222
|
+
|
223
|
+
allowed_options = [:ref, :max_count, :skip, :contains, :order]
|
224
|
+
|
225
|
+
actual_options.keep_if do |key, value|
|
226
|
+
allowed_options.include?(key)
|
227
|
+
end
|
228
|
+
|
229
|
+
default_options = {pretty: 'raw', order: :date}
|
230
|
+
|
231
|
+
actual_options = default_options.merge(actual_options)
|
232
|
+
|
233
|
+
order = actual_options.delete(:order)
|
234
|
+
|
235
|
+
case order
|
236
|
+
when :date
|
237
|
+
actual_options[:date_order] = true
|
238
|
+
when :topo
|
239
|
+
actual_options[:topo_order] = true
|
240
|
+
end
|
241
|
+
|
242
|
+
ref = actual_options.delete(:ref)
|
243
|
+
|
244
|
+
containing_commit = actual_options.delete(:contains)
|
245
|
+
|
246
|
+
args = []
|
247
|
+
|
248
|
+
if ref
|
249
|
+
args.push(ref)
|
250
|
+
elsif containing_commit
|
251
|
+
args.push(*branch_names_contains(containing_commit))
|
252
|
+
else
|
253
|
+
actual_options[:all] = true
|
254
|
+
end
|
255
|
+
|
256
|
+
output = raw.git.native(:rev_list, actual_options, *args)
|
257
|
+
|
258
|
+
Grit::Commit.list_from_string(raw, output).map do |commit|
|
259
|
+
Gitlab::Git::Commit.decorate(commit)
|
260
|
+
end
|
261
|
+
rescue Grit::GitRuby::Repository::NoSuchShaFound
|
262
|
+
[]
|
263
|
+
end
|
264
|
+
|
265
|
+
# Returns branch names collection that contains the special commit(SHA1 or name)
|
266
|
+
#
|
267
|
+
# Ex.
|
268
|
+
# repo.branch_names_contains('master')
|
269
|
+
#
|
270
|
+
def branch_names_contains(commit)
|
271
|
+
output = raw.git.native(:branch, {contains: true}, commit)
|
272
|
+
# The output is expected as follow
|
273
|
+
# fix-aaa
|
274
|
+
# fix-bbb
|
275
|
+
# * master
|
276
|
+
output.scan(/[^* \n]+/)
|
277
|
+
end
|
278
|
+
|
279
|
+
# Get refs hash which key is SHA1 and value is ref object(Grit::Head or Grit::Remote or Grit::Tag)
|
280
|
+
def refs_hash
|
281
|
+
# Initialize only when first call
|
282
|
+
if @refs_hash.nil?
|
283
|
+
@refs_hash = Hash.new { |h, k| h[k] = [] }
|
284
|
+
|
285
|
+
@raw.refs.each do |r|
|
286
|
+
@refs_hash[r.commit.id] << r
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
@refs_hash
|
291
|
+
end
|
202
292
|
end
|
203
293
|
end
|
204
294
|
end
|