rjgit 4.1.1.0 → 4.2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -3
- data/lib/blob.rb +1 -0
- data/lib/commit.rb +25 -15
- data/lib/git.rb +21 -3
- data/lib/java/jars/{org.eclipse.jgit-4.1.1.201511131810-r.jar → org.eclipse.jgit-4.2.0.201601211800-r.jar} +0 -0
- data/lib/rjgit.rb +31 -24
- data/lib/tag.rb +1 -0
- data/lib/tree.rb +48 -20
- data/lib/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d56351d6b926d22b1eebd8c8c958b638cb1aef80
|
4
|
+
data.tar.gz: 6c5a3308f8fb57d5be9e80617835ab60f84a5ca6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07703d7678e79653a27b6d6e605c056b45eb9181fbee56bfe098d889802af1e52a64611786f7c1c43da9e45fb9a2a722344d84aaaf7dd2860164ec2065345fe5
|
7
|
+
data.tar.gz: 16fb0eab317a868eb2239e3194d93a8727ead62d8be8e34b7bb0381e9bf66197d37afb4806804f2357e8e83efd0e5eae6b75c93f7354070fd051e8a943ff81eb
|
data/Gemfile
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem "mime-types", "~>
|
4
|
-
gem "rake", "~> 10.
|
3
|
+
gem "mime-types", "~> 2.6.2"
|
4
|
+
gem "rake", "~> 10.4.2"
|
5
5
|
|
6
6
|
gem 'coveralls', require: false
|
7
7
|
|
8
8
|
group :test do
|
9
|
-
gem "rspec", "
|
9
|
+
gem "rspec", "~> 3.4.0"
|
10
|
+
gem "rspec-collection_matchers", "~> 1.1.2"
|
10
11
|
gem "simplecov"
|
11
12
|
end
|
data/lib/blob.rb
CHANGED
data/lib/commit.rb
CHANGED
@@ -7,16 +7,9 @@ module RJGit
|
|
7
7
|
|
8
8
|
class Commit
|
9
9
|
|
10
|
-
attr_reader :id
|
11
|
-
attr_reader :
|
12
|
-
|
13
|
-
attr_reader :committer
|
14
|
-
attr_reader :authored_date
|
15
|
-
attr_reader :committed_date
|
16
|
-
attr_reader :message
|
17
|
-
attr_reader :short_message
|
18
|
-
attr_reader :jcommit
|
19
|
-
attr_reader :parent_count
|
10
|
+
attr_reader :id, :parents, :actor, :committer, :authored_date, :committed_date
|
11
|
+
attr_reader :message, :short_message, :jcommit, :parent_count
|
12
|
+
alias_method :get_name, :id
|
20
13
|
|
21
14
|
RJGit.delegate_to(RevCommit, :@jcommit)
|
22
15
|
|
@@ -38,14 +31,16 @@ module RJGit
|
|
38
31
|
end
|
39
32
|
|
40
33
|
def parents
|
41
|
-
@parents ||= @jcommit.get_parents.map
|
34
|
+
@parents ||= @jcommit.get_parents.map do |parent|
|
35
|
+
RJGit::Commit.new(@jrepo, RevWalk.new(@jrepo).parseCommit(parent.get_id))
|
36
|
+
end
|
42
37
|
end
|
43
38
|
|
44
39
|
def stats
|
45
40
|
df = DiffFormatter.new(DisabledOutputStream::INSTANCE)
|
46
41
|
df.set_repository(@jrepo)
|
47
42
|
df.set_context(0)
|
48
|
-
parent_commit = @jcommit.parent_count > 0 ? @jcommit.get_parents[0]:nil
|
43
|
+
parent_commit = @jcommit.parent_count > 0 ? @jcommit.get_parents[0] : nil
|
49
44
|
entries = df.scan(parent_commit, @jcommit)
|
50
45
|
results = {}
|
51
46
|
total_del = 0
|
@@ -67,6 +62,24 @@ module RJGit
|
|
67
62
|
return total_ins, total_del, results
|
68
63
|
end
|
69
64
|
|
65
|
+
def diff(options = {})
|
66
|
+
self.diffs(options).join
|
67
|
+
end
|
68
|
+
|
69
|
+
def diffs(options = {context: 2})
|
70
|
+
out_stream = ByteArrayOutputStream.new
|
71
|
+
formatter = DiffFormatter.new(out_stream)
|
72
|
+
formatter.set_repository(@jrepo)
|
73
|
+
formatter.set_context(options[:context])
|
74
|
+
parent_commit = @jcommit.parent_count > 0 ? @jcommit.get_parents.first : nil
|
75
|
+
entries = formatter.scan(parent_commit, @jcommit)
|
76
|
+
entries.each do |entry|
|
77
|
+
formatter.format(entry)
|
78
|
+
out_stream.write('custom_git_delimiter'.to_java_bytes)
|
79
|
+
end
|
80
|
+
out_stream.to_s.split('custom_git_delimiter')
|
81
|
+
end
|
82
|
+
|
70
83
|
# Pass an empty array for parents if the commit should have no parents
|
71
84
|
def self.new_with_tree(repository, tree, message, actor, parents = nil)
|
72
85
|
repository = RJGit.repository_type(repository)
|
@@ -102,8 +115,5 @@ module RJGit
|
|
102
115
|
end
|
103
116
|
end
|
104
117
|
|
105
|
-
def self.diff(repo, a, b = nil, paths = [], options = {})
|
106
|
-
end
|
107
|
-
|
108
118
|
end
|
109
119
|
end
|
data/lib/git.rb
CHANGED
@@ -27,6 +27,14 @@ module RJGit
|
|
27
27
|
@jgit = Git.new(@jrepo)
|
28
28
|
end
|
29
29
|
|
30
|
+
def logs(refs, options = {})
|
31
|
+
logs = []
|
32
|
+
refs.each do |ref|
|
33
|
+
logs << log(nil, ref, options)
|
34
|
+
end
|
35
|
+
logs
|
36
|
+
end
|
37
|
+
|
30
38
|
def log(path = nil, revstring = Constants::HEAD, options = {})
|
31
39
|
ref = jrepo.resolve(revstring)
|
32
40
|
return [] unless ref
|
@@ -52,9 +60,19 @@ module RJGit
|
|
52
60
|
logs.addPath(path) if path
|
53
61
|
logs.setMaxCount(options[:max_count]) if options[:max_count]
|
54
62
|
logs.setSkip(options[:skip]) if options[:skip]
|
55
|
-
|
56
|
-
|
57
|
-
|
63
|
+
|
64
|
+
if (options[:since] && options[:until])
|
65
|
+
revwalk = RevWalk.new(jrepo)
|
66
|
+
since_commit = revwalk.parseCommit(jrepo.resolve(options[:since]))
|
67
|
+
until_commit = revwalk.parseCommit(jrepo.resolve(options[:until]))
|
68
|
+
logs.addRange(since_commit, until_commit)
|
69
|
+
end
|
70
|
+
if options[:not]
|
71
|
+
revwalk = RevWalk.new(jrepo)
|
72
|
+
options[:not].each do |ref|
|
73
|
+
logs.not(revwalk.parseCommit(jrepo.resolve(ref)))
|
74
|
+
end
|
75
|
+
end
|
58
76
|
jcommits = logs.call
|
59
77
|
end
|
60
78
|
|
Binary file
|
data/lib/rjgit.rb
CHANGED
@@ -65,24 +65,36 @@ module RJGit
|
|
65
65
|
return bytes.to_a.pack('c*').force_encoding('UTF-8')
|
66
66
|
end
|
67
67
|
|
68
|
-
def self.ls_tree(repository,
|
69
|
-
options = {:
|
68
|
+
def self.ls_tree(repository, path=nil, treeish=Constants::HEAD, options={})
|
69
|
+
options = {recursive: false, print: false, io: $stdout, path_filter: nil}.merge options
|
70
70
|
jrepo = RJGit.repository_type(repository)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
last_commit_hash = jrepo.resolve(options[:ref])
|
76
|
-
return nil unless last_commit_hash
|
71
|
+
ref = treeish.respond_to?(:get_name) ? treeish.get_name : treeish
|
72
|
+
|
73
|
+
begin
|
74
|
+
obj = jrepo.resolve(ref)
|
77
75
|
walk = RevWalk.new(jrepo)
|
78
|
-
|
79
|
-
jtree =
|
76
|
+
revobj = walk.parse_any(obj)
|
77
|
+
jtree = case revobj.get_type
|
78
|
+
when Constants::OBJ_TREE
|
79
|
+
walk.parse_tree(obj)
|
80
|
+
when Constants::OBJ_COMMIT
|
81
|
+
walk.parse_commit(obj).get_tree
|
82
|
+
end
|
83
|
+
rescue Java::OrgEclipseJgitErrors::MissingObjectException, Java::JavaLang::IllegalArgumentException, Java::JavaLang::NullPointerException
|
84
|
+
return nil
|
85
|
+
end
|
86
|
+
if path
|
87
|
+
treewalk = TreeWalk.forPath(jrepo, path, jtree)
|
88
|
+
return nil unless treewalk
|
89
|
+
treewalk.enter_subtree
|
90
|
+
else
|
91
|
+
treewalk = TreeWalk.new(jrepo)
|
92
|
+
treewalk.add_tree(jtree)
|
80
93
|
end
|
81
|
-
treewalk = TreeWalk.new(jrepo)
|
82
94
|
treewalk.set_recursive(options[:recursive])
|
83
|
-
treewalk.set_filter(PathFilter.create(options[:
|
84
|
-
treewalk.add_tree(jtree)
|
95
|
+
treewalk.set_filter(PathFilter.create(options[:path_filter])) if options[:path_filter]
|
85
96
|
entries = []
|
97
|
+
|
86
98
|
while treewalk.next
|
87
99
|
entry = {}
|
88
100
|
mode = treewalk.get_file_mode(0)
|
@@ -93,8 +105,8 @@ module RJGit
|
|
93
105
|
entries << entry
|
94
106
|
end
|
95
107
|
options[:io].puts RJGit.stringify(entries) if options[:print]
|
96
|
-
|
97
|
-
end
|
108
|
+
entries
|
109
|
+
end
|
98
110
|
|
99
111
|
def self.blame(repository, file_path, options={})
|
100
112
|
options = {:print => false, :io => $stdout}.merge(options)
|
@@ -200,15 +212,14 @@ module RJGit
|
|
200
212
|
untouched_objects = {}
|
201
213
|
formatter = TreeFormatter.new
|
202
214
|
treemap ||= self.treemap
|
203
|
-
|
204
|
-
if start_tree then
|
215
|
+
if start_tree
|
205
216
|
treewalk = TreeWalk.new(@jrepo)
|
206
217
|
treewalk.add_tree(start_tree)
|
207
218
|
while treewalk.next
|
208
219
|
filename = treewalk.get_name_string
|
209
|
-
if treemap.keys.include?(filename)
|
220
|
+
if treemap.keys.include?(filename)
|
210
221
|
kind = treewalk.isSubtree ? :tree : :blob
|
211
|
-
if treemap[filename] == false
|
222
|
+
if treemap[filename] == false
|
212
223
|
@log[:deleted] << [kind, filename, treewalk.get_object_id(0)]
|
213
224
|
else
|
214
225
|
existing_trees[filename] = treewalk.get_object_id(0) if kind == :tree
|
@@ -220,9 +231,8 @@ module RJGit
|
|
220
231
|
end
|
221
232
|
end
|
222
233
|
end
|
223
|
-
|
224
|
-
sorted_treemap = treemap.inject({}) {|h, (k,v)| v.is_a?(Hash) ? h["#{k}/"] = v : h[k] = v; h }.merge(untouched_objects).sort
|
225
234
|
|
235
|
+
sorted_treemap = treemap.inject({}) {|h, (k,v)| v.is_a?(Hash) ? h["#{k}/"] = v : h[k] = v; h }.merge(untouched_objects).sort
|
226
236
|
sorted_treemap.each do |object_name, data|
|
227
237
|
case data
|
228
238
|
when Array
|
@@ -239,7 +249,6 @@ module RJGit
|
|
239
249
|
@log[:added] << [:blob, object_name, blobid]
|
240
250
|
end
|
241
251
|
end
|
242
|
-
|
243
252
|
object_inserter.insert(formatter)
|
244
253
|
end
|
245
254
|
|
@@ -349,5 +358,3 @@ module RJGit
|
|
349
358
|
end
|
350
359
|
|
351
360
|
end
|
352
|
-
|
353
|
-
|
data/lib/tag.rb
CHANGED
data/lib/tree.rb
CHANGED
@@ -5,7 +5,8 @@ module RJGit
|
|
5
5
|
|
6
6
|
class Tree
|
7
7
|
|
8
|
-
attr_reader :contents, :id, :mode, :name, :repo, :jtree
|
8
|
+
attr_reader :contents, :id, :mode, :name, :repo, :path, :jtree
|
9
|
+
alias_method :get_name, :id
|
9
10
|
RJGit.delegate_to(RevTree, :@jtree)
|
10
11
|
include Enumerable
|
11
12
|
|
@@ -21,19 +22,29 @@ module RJGit
|
|
21
22
|
def data
|
22
23
|
return @contents if @contents
|
23
24
|
strio = StringIO.new
|
24
|
-
RJGit::Porcelain.ls_tree(@jrepo, @
|
25
|
+
RJGit::Porcelain.ls_tree(@jrepo, @path, Constants::HEAD, options={:print => true, :io => strio})
|
25
26
|
@contents = strio.string
|
26
27
|
end
|
27
28
|
|
28
29
|
def contents_array
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
@contents_ary ||= jtree_entries
|
31
|
+
end
|
32
|
+
|
33
|
+
def count
|
34
|
+
contents_array.size
|
35
|
+
end
|
36
|
+
|
37
|
+
def recursive_contents_array(limit = nil)
|
38
|
+
if @recursive_contents.nil? || @recursive_contents[:limit] != limit
|
39
|
+
@recursive_contents = {}
|
40
|
+
@recursive_contents[:objects] = jtree_entries({recursive: true, limit: limit})
|
41
|
+
@recursive_contents[:limit] = limit
|
35
42
|
end
|
36
|
-
@
|
43
|
+
@recursive_contents[:objects]
|
44
|
+
end
|
45
|
+
|
46
|
+
def recursive_count(limit = nil)
|
47
|
+
recursive_contents_array(limit).size
|
37
48
|
end
|
38
49
|
|
39
50
|
def each(&block)
|
@@ -41,20 +52,17 @@ module RJGit
|
|
41
52
|
end
|
42
53
|
|
43
54
|
def blobs
|
44
|
-
contents_array.select {|x| x.is_a?(Blob)}
|
55
|
+
@content_blobs ||= contents_array.select {|x| x.is_a?(Blob)}
|
45
56
|
end
|
46
57
|
|
47
58
|
def trees
|
48
|
-
contents_array.select {|x| x.is_a?(Tree)}
|
59
|
+
@content_trees ||= contents_array.select {|x| x.is_a?(Tree)}
|
49
60
|
end
|
50
61
|
|
51
|
-
# From Grit
|
52
62
|
def /(file)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
self.contents_array.find { |c| c.name == file }
|
57
|
-
end
|
63
|
+
treewalk = TreeWalk.forPath(@jrepo, file, @jtree)
|
64
|
+
treewalk.nil? ? nil :
|
65
|
+
wrap_tree_or_blob(treewalk.get_file_mode(0), treewalk.get_path_string, treewalk.get_object_id(0))
|
58
66
|
end
|
59
67
|
|
60
68
|
def self.new_from_hashmap(repository, hashmap, base_tree = nil)
|
@@ -70,11 +78,11 @@ module RJGit
|
|
70
78
|
def self.find_tree(repository, file_path, revstring=Constants::HEAD)
|
71
79
|
jrepo = RJGit.repository_type(repository)
|
72
80
|
return nil if jrepo.nil?
|
73
|
-
|
74
|
-
return nil if
|
81
|
+
last_commit = jrepo.resolve(revstring)
|
82
|
+
return nil if last_commit.nil?
|
75
83
|
|
76
84
|
walk = RevWalk.new(jrepo)
|
77
|
-
commit = walk.parse_commit(
|
85
|
+
commit = walk.parse_commit(last_commit)
|
78
86
|
treewalk = TreeWalk.new(jrepo)
|
79
87
|
jtree = commit.get_tree
|
80
88
|
treewalk.add_tree(jtree)
|
@@ -89,6 +97,26 @@ module RJGit
|
|
89
97
|
nil
|
90
98
|
end
|
91
99
|
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
def jtree_entries(options={})
|
104
|
+
treewalk = TreeWalk.new(@jrepo)
|
105
|
+
treewalk.add_tree(@jtree)
|
106
|
+
treewalk.set_recursive(true) if options[:recursive]
|
107
|
+
entries = []
|
108
|
+
while treewalk.next
|
109
|
+
entries << wrap_tree_or_blob(treewalk.get_file_mode(0), treewalk.get_path_string, treewalk.get_object_id(0))
|
110
|
+
break if options[:limit] && entries.size >= options[:limit].to_i
|
111
|
+
end
|
112
|
+
entries
|
113
|
+
end
|
114
|
+
|
115
|
+
def wrap_tree_or_blob(mode, path, id)
|
116
|
+
type = mode.get_object_type == Constants::OBJ_TREE ? RJGit::Tree : RJGit::Blob
|
117
|
+
walk = RevWalk.new(@jrepo)
|
118
|
+
type.new(@jrepo, mode.get_bits, path, walk.parse_any(id))
|
119
|
+
end
|
92
120
|
|
93
121
|
end
|
94
122
|
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rjgit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maarten Engelen
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2016-01-25 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: mime-types
|
@@ -45,7 +45,7 @@ files:
|
|
45
45
|
- lib/constants.rb
|
46
46
|
- lib/git.rb
|
47
47
|
- lib/java/jars/jsch-0.1.49.jar
|
48
|
-
- lib/java/jars/org.eclipse.jgit-4.
|
48
|
+
- lib/java/jars/org.eclipse.jgit-4.2.0.201601211800-r.jar
|
49
49
|
- lib/java/jars/slf4j-api-1.7.2.jar
|
50
50
|
- lib/java/jars/slf4j-simple-1.7.12.jar
|
51
51
|
- lib/repo.rb
|