rjgit 4.2.0.0 → 4.2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/git.rb +92 -19
- data/lib/repo.rb +10 -2
- data/lib/tree.rb +5 -1
- data/lib/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 738fc495773f62915e0f17f7266abd3de241ae7f
|
4
|
+
data.tar.gz: 9c7edfdc17e0439e98ecd254a184292ea0cde524
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a6e9c6bc9db3594325b28eca28fd9f9ba00b3a0ee9f9932e8a50b3e45addb77df14418bdd15b56138c44d9e621fc6fa5c7361de54e25328f19422063ffbd304
|
7
|
+
data.tar.gz: f91fcfcd0749fa320bc736c480a1fef73e8daf68ab4dc421349fedca2a00cf72706143cbf9fa2858e00fce4356c47199cc5e6dde3208827235365ca5880d914b
|
data/lib/git.rb
CHANGED
@@ -12,6 +12,9 @@ module RJGit
|
|
12
12
|
import 'org.eclipse.jgit.diff.RenameDetector'
|
13
13
|
import 'org.eclipse.jgit.diff.DiffEntry'
|
14
14
|
import 'org.eclipse.jgit.treewalk.filter.PathFilter'
|
15
|
+
import 'org.eclipse.jgit.api.TransportConfigCallback'
|
16
|
+
import 'org.eclipse.jgit.transport.JschConfigSessionFactory'
|
17
|
+
import 'org.eclipse.jgit.transport.SshTransport'
|
15
18
|
|
16
19
|
class RubyGit
|
17
20
|
|
@@ -19,6 +22,10 @@ module RJGit
|
|
19
22
|
attr_accessor :jrepo
|
20
23
|
|
21
24
|
RESET_MODES = ["HARD", "SOFT", "KEEP", "MERGE", "MIXED"]
|
25
|
+
SSH_TRANSPORTS = ["ssh"]
|
26
|
+
HTTP_TRANSPORTS = ["http", "https"]
|
27
|
+
FILE_TRANSPORTS = ["file"]
|
28
|
+
VALID_TRANSPORTS = SSH_TRANSPORTS + HTTP_TRANSPORTS + FILE_TRANSPORTS
|
22
29
|
|
23
30
|
RJGit.delegate_to(Git, :@jgit)
|
24
31
|
|
@@ -34,14 +41,14 @@ module RJGit
|
|
34
41
|
end
|
35
42
|
logs
|
36
43
|
end
|
37
|
-
|
44
|
+
|
38
45
|
def log(path = nil, revstring = Constants::HEAD, options = {})
|
39
46
|
ref = jrepo.resolve(revstring)
|
40
47
|
return [] unless ref
|
41
48
|
jcommits = Array.new
|
42
|
-
|
49
|
+
|
43
50
|
if path && options[:follow]
|
44
|
-
current_path = path
|
51
|
+
current_path = path
|
45
52
|
start = nil
|
46
53
|
loop do
|
47
54
|
logs = @jgit.log.add(ref).addPath(current_path).call
|
@@ -53,8 +60,8 @@ module RJGit
|
|
53
60
|
current_path = follow_renames(start, current_path) if start
|
54
61
|
break if current_path.nil?
|
55
62
|
end
|
56
|
-
|
57
|
-
else
|
63
|
+
|
64
|
+
else
|
58
65
|
logs = @jgit.log
|
59
66
|
logs.add(ref)
|
60
67
|
logs.addPath(path) if path
|
@@ -65,7 +72,7 @@ module RJGit
|
|
65
72
|
revwalk = RevWalk.new(jrepo)
|
66
73
|
since_commit = revwalk.parseCommit(jrepo.resolve(options[:since]))
|
67
74
|
until_commit = revwalk.parseCommit(jrepo.resolve(options[:until]))
|
68
|
-
logs.addRange(since_commit, until_commit)
|
75
|
+
logs.addRange(since_commit, until_commit)
|
69
76
|
end
|
70
77
|
if options[:not]
|
71
78
|
revwalk = RevWalk.new(jrepo)
|
@@ -75,7 +82,7 @@ module RJGit
|
|
75
82
|
end
|
76
83
|
jcommits = logs.call
|
77
84
|
end
|
78
|
-
|
85
|
+
|
79
86
|
jcommits.map{ |jcommit| Commit.new(jrepo, jcommit) }
|
80
87
|
end
|
81
88
|
|
@@ -127,6 +134,66 @@ module RJGit
|
|
127
134
|
RubyGit.clone(remote, local, options)
|
128
135
|
end
|
129
136
|
|
137
|
+
class RJGitSSHConfigCallback
|
138
|
+
include TransportConfigCallback
|
139
|
+
def initialize(options = {})
|
140
|
+
@sshSessionFactory = Class.new(JschConfigSessionFactory) {
|
141
|
+
def initialize(options)
|
142
|
+
super()
|
143
|
+
@private_key_file = options[:private_key_file]
|
144
|
+
@private_key_passphrase = options[:private_key_passphrase]
|
145
|
+
@username = options[:username]
|
146
|
+
@password = options[:password]
|
147
|
+
@known_hosts_file = options[:known_hosts_file]
|
148
|
+
end
|
149
|
+
|
150
|
+
def configure(host, session)
|
151
|
+
session.setUserName(@username) if @username
|
152
|
+
session.setPassword(@password) if @password
|
153
|
+
end
|
154
|
+
|
155
|
+
def createDefaultJSch(fs)
|
156
|
+
default_j_sch = super(fs)
|
157
|
+
if @private_key_file
|
158
|
+
default_j_sch.removeAllIdentity()
|
159
|
+
if @private_key_passphrase
|
160
|
+
default_j_sch.addIdentity(@private_key_file, @private_key_passphrase)
|
161
|
+
else
|
162
|
+
default_j_sch.addIdentity(@private_key_file)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
if @known_hosts_file
|
166
|
+
default_j_sch.setKnownHosts(@known_hosts_file)
|
167
|
+
end
|
168
|
+
|
169
|
+
return default_j_sch
|
170
|
+
end
|
171
|
+
}.new(options)
|
172
|
+
end
|
173
|
+
|
174
|
+
def configure(ssh_transport)
|
175
|
+
ssh_transport.setSshSessionFactory(@sshSessionFactory)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def self.set_command_transport(command, remote, options = {})
|
180
|
+
uri = nil
|
181
|
+
begin
|
182
|
+
uri = URI.parse(remote) if remote
|
183
|
+
rescue URI::InvalidURIError
|
184
|
+
end
|
185
|
+
|
186
|
+
if uri && (VALID_TRANSPORTS.include? uri.scheme)
|
187
|
+
transport_protocol = uri.scheme
|
188
|
+
end
|
189
|
+
|
190
|
+
if (SSH_TRANSPORTS.include? transport_protocol.to_s) || (options[:transport_protocol] == :ssh) || options[:private_key_file]
|
191
|
+
command.set_transport_config_callback(RJGitSSHConfigCallback.new(options))
|
192
|
+
elsif (HTTP_TRANSPORTS.include? transport_protocol.to_s) || options[:username]
|
193
|
+
command.set_credentials_provider(UsernamePasswordCredentialsProvider.new(options[:username], options[:password]))
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
130
197
|
def self.clone(remote, local, options = {})
|
131
198
|
clone_command = Git.clone_repository
|
132
199
|
clone_command.setURI(remote)
|
@@ -139,9 +206,8 @@ module RJGit
|
|
139
206
|
clone_command.set_branch(options[:branch])
|
140
207
|
end
|
141
208
|
end
|
142
|
-
|
143
|
-
|
144
|
-
end
|
209
|
+
|
210
|
+
set_command_transport(clone_command, remote, options)
|
145
211
|
clone_command.call
|
146
212
|
Repo.new(local)
|
147
213
|
end
|
@@ -275,9 +341,8 @@ module RJGit
|
|
275
341
|
push_command.set_remote(remote)
|
276
342
|
push_command.set_push_all
|
277
343
|
push_command.set_push_tags
|
278
|
-
|
279
|
-
|
280
|
-
end
|
344
|
+
|
345
|
+
self.class.set_command_transport(push_command, remote, options)
|
281
346
|
push_command.call
|
282
347
|
end
|
283
348
|
|
@@ -289,9 +354,7 @@ module RJGit
|
|
289
354
|
refs.map!{|ref| RefSpec.new(ref)}
|
290
355
|
push_command.set_ref_specs(refs)
|
291
356
|
end
|
292
|
-
|
293
|
-
push_command.set_credentials_provider(UsernamePasswordCredentialsProvider.new(options[:username], options[:password]))
|
294
|
-
end
|
357
|
+
self.class.set_command_transport(push_command, remote, options)
|
295
358
|
push_command.call
|
296
359
|
end
|
297
360
|
|
@@ -301,11 +364,21 @@ module RJGit
|
|
301
364
|
pull_command.set_rebase(options[:rebase]) if options[:rebase]
|
302
365
|
pull_command.set_remote(remote) if remote
|
303
366
|
pull_command.set_remote_branch_name(remote_ref) if remote_ref
|
304
|
-
|
305
|
-
pull_command.set_credentials_provider(UsernamePasswordCredentialsProvider.new(options[:username], options[:password]))
|
306
|
-
end
|
367
|
+
self.class.set_command_transport(pull_command, remote, options)
|
307
368
|
pull_command.call
|
308
369
|
end
|
309
370
|
|
371
|
+
def fetch(remote = nil, options = {})
|
372
|
+
fetch_command = @jgit.fetch
|
373
|
+
fetch_command.set_dry_run(true) if options[:dryrun]
|
374
|
+
fetch_command.set_thin(true) if options[:thin]
|
375
|
+
fetch_command.set_check_fetched_objects(true) if options[:check_fetched_objects]
|
376
|
+
fetch_command.set_remove_deleted_refs(true) if options[:remove_deleted_refs]
|
377
|
+
fetch_command.set_ref_specs(RefSpec.new(options[:refspecs])) if options[:refspecs]
|
378
|
+
fetch_command.set_remote(remote) if remote
|
379
|
+
self.class.set_command_transport(fetch_command, remote, options)
|
380
|
+
fetch_command.call
|
381
|
+
end
|
382
|
+
|
310
383
|
end
|
311
384
|
end
|
data/lib/repo.rb
CHANGED
@@ -42,7 +42,15 @@ module RJGit
|
|
42
42
|
|
43
43
|
def initialize(path, options = {})
|
44
44
|
epath = File.expand_path(path)
|
45
|
-
|
45
|
+
if options[:git_dir]
|
46
|
+
if (Pathname.new options[:git_dir]).absolute?
|
47
|
+
gitpath = options[:git_dir]
|
48
|
+
else
|
49
|
+
gitpath = File.expand_path(options[:git_dir])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
gitpath = File.join(epath, '.git')
|
53
|
+
end
|
46
54
|
|
47
55
|
# Default value for bare
|
48
56
|
bare = false
|
@@ -61,7 +69,7 @@ module RJGit
|
|
61
69
|
@path = bare ? epath : gitpath
|
62
70
|
@config = RJGit::Configuration.new(File.join(@path, 'config'))
|
63
71
|
repo_path = java.io.File.new(@path)
|
64
|
-
@jrepo = bare ? RepositoryBuilder.new().set_bare.set_git_dir(repo_path).build() : RepositoryBuilder.new().set_git_dir(repo_path).build()
|
72
|
+
@jrepo = bare ? RepositoryBuilder.new().set_bare.set_git_dir(repo_path).build() : RepositoryBuilder.new().set_git_dir(repo_path).set_work_tree(java.io.File.new(epath)).build()
|
65
73
|
@jrepo.create(bare) if options[:create]
|
66
74
|
@git = RubyGit.new(@jrepo)
|
67
75
|
end
|
data/lib/tree.rb
CHANGED
@@ -60,7 +60,11 @@ module RJGit
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def /(file)
|
63
|
-
|
63
|
+
begin
|
64
|
+
treewalk = TreeWalk.forPath(@jrepo, file, @jtree)
|
65
|
+
rescue Java::JavaLang::IllegalArgumentException
|
66
|
+
return self
|
67
|
+
end
|
64
68
|
treewalk.nil? ? nil :
|
65
69
|
wrap_tree_or_blob(treewalk.get_file_mode(0), treewalk.get_path_string, treewalk.get_object_id(0))
|
66
70
|
end
|
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.2.0.
|
4
|
+
version: 4.2.0.1
|
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: 2016-
|
15
|
+
date: 2016-02-21 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: mime-types
|