gitlab_git 2.3.1 → 3.0.0.beta1
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/blob.rb +22 -28
- data/lib/gitlab_git/git_stats.rb +1 -1
- data/lib/gitlab_git/repository.rb +40 -58
- data/lib/gitlab_git/tree.rb +33 -35
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c207576fe702ed6a64b24f956856968287325866
|
4
|
+
data.tar.gz: 0fc3ac8c449422b760cdac189d84b56691fda26c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f37199e9248a6681bb127f65dff32026bc2a39bfee7c50eda5a566ec8a94620803a4f184f2e5df882bfa28ff97231b2a8f8837c02ae6afc4821765e0b8e9094
|
7
|
+
data.tar.gz: 01909f36d53f1986d1972009d1f7a45ff3907c4eb3d2184e9ffc705d8ca141db444e699099530e4e081ffc246ca79cf2eb66762843005274653c833dce9772ff
|
data/lib/gitlab_git/blob.rb
CHANGED
@@ -3,42 +3,36 @@ module Gitlab
|
|
3
3
|
class Blob
|
4
4
|
include Linguist::BlobHelper
|
5
5
|
|
6
|
-
attr_accessor :
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
6
|
+
attr_accessor :name, :path, :size, :data, :mode, :id, :commit_id
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def find(repository, sha, path)
|
10
|
+
commit = Commit.find(repository, sha)
|
11
|
+
grit_blob = commit.tree / path
|
12
|
+
|
13
|
+
if grit_blob.kind_of?(Grit::Blob)
|
14
|
+
Blob.new(
|
15
|
+
id: grit_blob.id,
|
16
|
+
name: grit_blob.name,
|
17
|
+
size: grit_blob.size,
|
18
|
+
data: grit_blob.data,
|
19
|
+
mode: grit_blob.mode,
|
20
|
+
path: path,
|
21
|
+
commit_id: sha,
|
22
|
+
)
|
23
|
+
end
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
def exists?
|
28
|
-
raw_blob
|
27
|
+
def initialize(options)
|
28
|
+
%w(id name path size data mode commit_id).each do |key|
|
29
|
+
self.send("#{key}=", options[key.to_sym])
|
30
|
+
end
|
29
31
|
end
|
30
32
|
|
31
33
|
def empty?
|
32
34
|
!data || data == ''
|
33
35
|
end
|
34
|
-
|
35
|
-
def mode
|
36
|
-
raw_blob.mode
|
37
|
-
end
|
38
|
-
|
39
|
-
def size
|
40
|
-
raw_blob.size
|
41
|
-
end
|
42
36
|
end
|
43
37
|
end
|
44
38
|
end
|
data/lib/gitlab_git/git_stats.rb
CHANGED
@@ -13,7 +13,7 @@ module Gitlab
|
|
13
13
|
log = nil
|
14
14
|
Grit::Git.with_timeout(30) do
|
15
15
|
# Limit log to 6k commits to avoid timeout for huge projects
|
16
|
-
args = [
|
16
|
+
args = ['-6000', '--format=%aN%x0a%aE%x0a%cd', '--date=short', '--shortstat', '--no-merges', '--diff-filter=ACDM']
|
17
17
|
log = repo.git.run(nil, 'log', nil, {}, args)
|
18
18
|
end
|
19
19
|
|
@@ -8,44 +8,29 @@ module Gitlab
|
|
8
8
|
|
9
9
|
class NoRepository < StandardError; end
|
10
10
|
|
11
|
-
class << self
|
12
|
-
attr_accessor :repos_path
|
13
|
-
end
|
14
|
-
|
15
|
-
# Repository directory name with namespace direcotry
|
16
|
-
# Examples:
|
17
|
-
# gitlab/gitolite
|
18
|
-
# diaspora
|
19
|
-
#
|
20
|
-
attr_accessor :path_with_namespace
|
21
|
-
|
22
11
|
# Default branch in the repository
|
23
12
|
attr_accessor :root_ref
|
24
13
|
|
25
|
-
#
|
26
|
-
attr_reader :
|
27
|
-
|
28
|
-
# compatibility
|
29
|
-
alias_method :repo, :raw
|
14
|
+
# Full path to repo
|
15
|
+
attr_reader :path
|
30
16
|
|
31
|
-
|
32
|
-
|
33
|
-
@root_ref = root_ref || raw.head.name
|
17
|
+
# Directory name of repo
|
18
|
+
attr_reader :name
|
34
19
|
|
35
|
-
|
36
|
-
|
37
|
-
end
|
20
|
+
# Grit repo object
|
21
|
+
attr_reader :grit
|
38
22
|
|
39
|
-
|
40
|
-
|
41
|
-
end
|
23
|
+
# Alias to old method for compatibility
|
24
|
+
alias_method :raw, :grit
|
42
25
|
|
43
|
-
def
|
44
|
-
|
26
|
+
def initialize(path)
|
27
|
+
@path = path
|
28
|
+
@name = path.split("/").last
|
29
|
+
@root_ref = discover_default_branch
|
45
30
|
end
|
46
31
|
|
47
|
-
def
|
48
|
-
@
|
32
|
+
def grit
|
33
|
+
@grit ||= Grit::Repo.new(path)
|
49
34
|
rescue Grit::NoSuchPathError
|
50
35
|
raise NoRepository.new('no repository for such path')
|
51
36
|
end
|
@@ -58,7 +43,7 @@ module Gitlab
|
|
58
43
|
|
59
44
|
# Returns an Array of Branches
|
60
45
|
def branches
|
61
|
-
|
46
|
+
grit.branches.sort_by(&:name)
|
62
47
|
end
|
63
48
|
|
64
49
|
# Returns an Array of tag names
|
@@ -68,7 +53,7 @@ module Gitlab
|
|
68
53
|
|
69
54
|
# Returns an Array of Tags
|
70
55
|
def tags
|
71
|
-
|
56
|
+
grit.tags.sort_by(&:name).reverse
|
72
57
|
end
|
73
58
|
|
74
59
|
# Returns an Array of branch and tag names
|
@@ -77,13 +62,7 @@ module Gitlab
|
|
77
62
|
end
|
78
63
|
|
79
64
|
def heads
|
80
|
-
@heads ||=
|
81
|
-
end
|
82
|
-
|
83
|
-
def tree(fcommit, path = nil)
|
84
|
-
fcommit = commit if fcommit == :head
|
85
|
-
tree = fcommit.tree
|
86
|
-
path ? (tree / path) : tree
|
65
|
+
@heads ||= grit.heads.sort_by(&:name)
|
87
66
|
end
|
88
67
|
|
89
68
|
def has_commits?
|
@@ -100,15 +79,18 @@ module Gitlab
|
|
100
79
|
#
|
101
80
|
# - If no branches are present, returns nil
|
102
81
|
# - If one branch is present, returns its name
|
103
|
-
# - If two or more branches are present, returns
|
104
|
-
# matching root_ref (default_branch or 'master' if default_branch is nil)
|
82
|
+
# - If two or more branches are present, returns current HEAD or master or first branch
|
105
83
|
def discover_default_branch
|
106
84
|
if branch_names.length == 0
|
107
85
|
nil
|
108
86
|
elsif branch_names.length == 1
|
109
87
|
branch_names.first
|
110
|
-
|
111
|
-
|
88
|
+
elsif grit.head
|
89
|
+
grit.head.name
|
90
|
+
elsif branch_names.include?("master")
|
91
|
+
"master"
|
92
|
+
elsif
|
93
|
+
branch_names.first
|
112
94
|
end
|
113
95
|
end
|
114
96
|
|
@@ -123,16 +105,16 @@ module Gitlab
|
|
123
105
|
return nil unless commit
|
124
106
|
|
125
107
|
# Build file path
|
126
|
-
file_name = self.
|
127
|
-
file_path = File.join(storage_path, self.
|
108
|
+
file_name = self.name.gsub("\.git", "") + "-" + commit.id.to_s + ".tar.gz"
|
109
|
+
file_path = File.join(storage_path, self.name, file_name)
|
128
110
|
|
129
111
|
# Put files into a directory before archiving
|
130
|
-
prefix = File.basename(self.
|
112
|
+
prefix = File.basename(self.name) + "/"
|
131
113
|
|
132
114
|
# Create file if not exists
|
133
115
|
unless File.exists?(file_path)
|
134
116
|
FileUtils.mkdir_p File.dirname(file_path)
|
135
|
-
file = self.
|
117
|
+
file = self.grit.archive_to_file(ref, prefix, file_path)
|
136
118
|
end
|
137
119
|
|
138
120
|
file_path
|
@@ -140,7 +122,7 @@ module Gitlab
|
|
140
122
|
|
141
123
|
# Return repo size in megabytes
|
142
124
|
def size
|
143
|
-
size = popen('du -s',
|
125
|
+
size = popen('du -s', path).first.strip.to_i
|
144
126
|
(size.to_f / 1024).round(2)
|
145
127
|
end
|
146
128
|
|
@@ -149,7 +131,7 @@ module Gitlab
|
|
149
131
|
ref = root_ref
|
150
132
|
end
|
151
133
|
|
152
|
-
greps =
|
134
|
+
greps = grit.grep(query, 3, ref)
|
153
135
|
|
154
136
|
greps.map do |grep|
|
155
137
|
Gitlab::Git::BlobSnippet.new(ref, grep.content, grep.startline, grep.filename)
|
@@ -177,7 +159,7 @@ module Gitlab
|
|
177
159
|
|
178
160
|
options = default_options.merge(options)
|
179
161
|
|
180
|
-
|
162
|
+
grit.log(
|
181
163
|
options[:ref] || root_ref,
|
182
164
|
options[:path],
|
183
165
|
max_count: options[:limit].to_i,
|
@@ -189,15 +171,15 @@ module Gitlab
|
|
189
171
|
# Delegate commits_between to Grit method
|
190
172
|
#
|
191
173
|
def commits_between(from, to)
|
192
|
-
|
174
|
+
grit.commits_between(from, to)
|
193
175
|
end
|
194
176
|
|
195
177
|
def merge_base_commit(from, to)
|
196
|
-
|
178
|
+
grit.git.native(:merge_base, {}, [to, from]).strip
|
197
179
|
end
|
198
180
|
|
199
181
|
def diff(from, to)
|
200
|
-
|
182
|
+
grit.diff(from, to)
|
201
183
|
end
|
202
184
|
|
203
185
|
# Returns commits collection
|
@@ -253,9 +235,9 @@ module Gitlab
|
|
253
235
|
actual_options[:all] = true
|
254
236
|
end
|
255
237
|
|
256
|
-
output =
|
238
|
+
output = grit.git.native(:rev_list, actual_options, *args)
|
257
239
|
|
258
|
-
Grit::Commit.list_from_string(
|
240
|
+
Grit::Commit.list_from_string(grit, output).map do |commit|
|
259
241
|
Gitlab::Git::Commit.decorate(commit)
|
260
242
|
end
|
261
243
|
rescue Grit::GitRuby::Repository::NoSuchShaFound
|
@@ -268,7 +250,7 @@ module Gitlab
|
|
268
250
|
# repo.branch_names_contains('master')
|
269
251
|
#
|
270
252
|
def branch_names_contains(commit)
|
271
|
-
output =
|
253
|
+
output = grit.git.native(:branch, {contains: true}, commit)
|
272
254
|
# The output is expected as follow
|
273
255
|
# fix-aaa
|
274
256
|
# fix-bbb
|
@@ -276,17 +258,17 @@ module Gitlab
|
|
276
258
|
output.scan(/[^* \n]+/)
|
277
259
|
end
|
278
260
|
|
279
|
-
# Get refs hash which key is SHA1
|
261
|
+
# Get refs hash which key is SHA1
|
262
|
+
# and value is ref object(Grit::Head or Grit::Remote or Grit::Tag)
|
280
263
|
def refs_hash
|
281
264
|
# Initialize only when first call
|
282
265
|
if @refs_hash.nil?
|
283
266
|
@refs_hash = Hash.new { |h, k| h[k] = [] }
|
284
267
|
|
285
|
-
|
268
|
+
grit.refs.each do |r|
|
286
269
|
@refs_hash[r.commit.id] << r
|
287
270
|
end
|
288
271
|
end
|
289
|
-
|
290
272
|
@refs_hash
|
291
273
|
end
|
292
274
|
end
|
data/lib/gitlab_git/tree.rb
CHANGED
@@ -1,54 +1,52 @@
|
|
1
1
|
module Gitlab
|
2
2
|
module Git
|
3
3
|
class Tree
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :id, :name, :path, :type, :mode, :commit_id
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
class << self
|
7
|
+
def where(repository, sha, path = '/')
|
8
|
+
commit = Commit.find(repository, sha)
|
9
|
+
grit_tree = commit.tree / path
|
8
10
|
|
9
|
-
|
11
|
+
if grit_tree && grit_tree.respond_to?(:contents)
|
12
|
+
grit_tree.contents.map do |entry|
|
13
|
+
type = entry.class.to_s.split("::").last.downcase.to_sym
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
15
|
+
Tree.new(
|
16
|
+
id: entry.id,
|
17
|
+
name: entry.name,
|
18
|
+
type: type,
|
19
|
+
mode: entry.mode,
|
20
|
+
path: path == '/' ? entry.name : File.join(path, entry.name),
|
21
|
+
commit_id: sha,
|
22
|
+
)
|
23
|
+
end
|
24
|
+
else
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
end
|
14
28
|
end
|
15
29
|
|
16
|
-
def
|
17
|
-
|
30
|
+
def initialize(options)
|
31
|
+
%w(id name path type mode commit_id).each do |key|
|
32
|
+
self.send("#{key}=", options[key.to_sym])
|
33
|
+
end
|
18
34
|
end
|
19
35
|
|
20
|
-
def
|
21
|
-
|
36
|
+
def dir?
|
37
|
+
type == :tree
|
22
38
|
end
|
23
39
|
|
24
|
-
def
|
25
|
-
|
40
|
+
def file?
|
41
|
+
type == :blob
|
26
42
|
end
|
27
43
|
|
28
|
-
def
|
29
|
-
|
44
|
+
def submodule?
|
45
|
+
type == :submodule
|
30
46
|
end
|
31
47
|
|
32
|
-
def
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def is_blob?
|
37
|
-
raw_tree.is_a?(Grit::Blob)
|
38
|
-
end
|
39
|
-
|
40
|
-
def up_dir?
|
41
|
-
path && path != ''
|
42
|
-
end
|
43
|
-
|
44
|
-
def readme
|
45
|
-
@readme ||= blobs.find { |c| c.name =~ /^readme/i }
|
46
|
-
end
|
47
|
-
|
48
|
-
protected
|
49
|
-
|
50
|
-
def entries
|
51
|
-
raw_tree.contents
|
48
|
+
def readme?
|
49
|
+
name =~ /^readme/i
|
52
50
|
end
|
53
51
|
end
|
54
52
|
end
|
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: 3.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitriy Zaporozhets
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: github-linguist
|
@@ -86,9 +86,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
86
|
version: '0'
|
87
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- - '
|
89
|
+
- - '>'
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
91
|
+
version: 1.3.1
|
92
92
|
requirements: []
|
93
93
|
rubyforge_project:
|
94
94
|
rubygems_version: 2.0.3
|