nucleon 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/core/manager.rb +2 -0
- data/lib/core/plugin/project.rb +20 -14
- data/lib/core/util/ssh.rb +2 -2
- data/lib/nucleon/extension/project.rb +4 -3
- data/lib/nucleon/project/github.rb +27 -27
- data/nucleon.gemspec +3 -3
- 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: d10a46930f8caf3251ae8b76d41b6ab9b62d574e
|
4
|
+
data.tar.gz: 985081596d90a480a7ec1db3d632942d22b679af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7955a1fd5c4816170b7aedcbcede162b309bccad724c47a8f502e213ebade046ad8f324283a60acbf2c190de5ff5bfe1018513ccae142aae6ff150582d6a7d0b
|
7
|
+
data.tar.gz: 57d13dce28164b20c48ea994df8c612021f76ad2e61b64a245a60b69188858c259f1c144545d5be6d3cde9f22700642916d23b7cefdbad54c5418894e6409eca
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.7
|
data/lib/core/manager.rb
CHANGED
@@ -529,6 +529,8 @@ class Manager
|
|
529
529
|
type_info = loaded_plugin(namespace, plugin_type, provider)
|
530
530
|
options = translate_type(type_info, options)
|
531
531
|
config = Config.ensure(options)
|
532
|
+
|
533
|
+
provider = config.get(:provider, provider)
|
532
534
|
name = config.get(:name, nil)
|
533
535
|
ensure_new = config.get(:new, false)
|
534
536
|
|
data/lib/core/plugin/project.rb
CHANGED
@@ -28,9 +28,9 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
|
|
28
28
|
logger.info("Creating new project at #{directory} with #{provider}")
|
29
29
|
|
30
30
|
return Nucleon.project(config.import({
|
31
|
-
:name
|
32
|
-
:directory
|
33
|
-
:
|
31
|
+
:name => directory,
|
32
|
+
:directory => directory,
|
33
|
+
:nucleon_file => config.get(:nucleon_file, true)
|
34
34
|
}), provider)
|
35
35
|
|
36
36
|
else
|
@@ -74,8 +74,14 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
|
|
74
74
|
@cache = Util::Cache.new(directory, Nucleon.sha1(plugin_name), '.project_cache')
|
75
75
|
init_cache
|
76
76
|
|
77
|
-
if get(:
|
78
|
-
self.class.
|
77
|
+
if get(:nucleon_file, true) && ( get(:nucleon_resave, false) || self.class.load_project_info(directory).empty? )
|
78
|
+
self.class.store_project_info(directory, plugin_provider, Util::Data.subset(export, [
|
79
|
+
:provider,
|
80
|
+
:url,
|
81
|
+
:edit,
|
82
|
+
:revision,
|
83
|
+
:manage_ignore
|
84
|
+
]))
|
79
85
|
end
|
80
86
|
end
|
81
87
|
end
|
@@ -523,7 +529,7 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
|
|
523
529
|
if add_project
|
524
530
|
logger.debug("Directory #{project_path} is a valid sub project for this #{plugin_provider} project")
|
525
531
|
|
526
|
-
project = myself.class.open(project_path, plugin_provider, { :
|
532
|
+
project = myself.class.open(project_path, plugin_provider, { :nucleon_file => get(:nucleon_file, true) })
|
527
533
|
|
528
534
|
extension(:load_project, { :project => project })
|
529
535
|
subprojects[path] = project
|
@@ -888,18 +894,18 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
|
|
888
894
|
# State configurations
|
889
895
|
|
890
896
|
def self.state_file
|
891
|
-
'.
|
897
|
+
'.nucleon'
|
892
898
|
end
|
893
899
|
|
894
900
|
#---
|
895
901
|
|
896
902
|
@@project_data = {}
|
897
903
|
|
898
|
-
def self.
|
904
|
+
def self.store_project_info(directory, provider, options)
|
899
905
|
if File.directory?(directory)
|
900
|
-
@@project_data[directory] = {
|
906
|
+
@@project_data[directory] = Config.ensure(options).import({
|
901
907
|
:provider => provider
|
902
|
-
}
|
908
|
+
}).export
|
903
909
|
json_data = Util::Data.to_json(@@project_data[directory], true)
|
904
910
|
Util::Disk.write(File.join(directory, state_file), json_data)
|
905
911
|
end
|
@@ -907,20 +913,20 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
|
|
907
913
|
|
908
914
|
#---
|
909
915
|
|
910
|
-
def self.
|
916
|
+
def self.clear_project_info(directory)
|
911
917
|
@@project_data.delete(directory)
|
912
918
|
end
|
913
919
|
|
914
920
|
#---
|
915
921
|
|
916
|
-
def self.
|
922
|
+
def self.load_project_info(directory)
|
917
923
|
@@project_data[directory] = {} unless @@project_data.has_key?(directory)
|
918
924
|
|
919
|
-
if
|
925
|
+
if @@project_data[directory].empty?
|
920
926
|
json_data = Util::Disk.read(File.join(directory, state_file))
|
921
927
|
@@project_data[directory] = hash(Util::Data.parse_json(json_data)) if json_data
|
922
928
|
end
|
923
|
-
|
929
|
+
symbol_map(@@project_data[directory])
|
924
930
|
end
|
925
931
|
|
926
932
|
#-----------------------------------------------------------------------------
|
data/lib/core/util/ssh.rb
CHANGED
@@ -162,12 +162,12 @@ class SSH < Core
|
|
162
162
|
:user_known_hosts_file => [ File.join(key_path, 'known_hosts'), File.join(key_path, 'known_hosts2') ],
|
163
163
|
:auth_methods => [ 'publickey' ],
|
164
164
|
:paranoid => :very
|
165
|
-
}, {}, true, false).import(Util::Data.subset(config, config.keys - [ :keypair, :key_dir, :key_name ]))
|
165
|
+
}, {}, true, false).import(Util::Data.subset(config, config.keys - [ :keypair, :key_dir, :key_name, :reset_conn ]))
|
166
166
|
|
167
167
|
if private_key
|
168
168
|
auth_id = [ session_id, private_key ].join('_')
|
169
169
|
|
170
|
-
if ! @@auth[auth_id] && keypair = unlock_private_key(private_key, config)
|
170
|
+
if (config[:reset_conn] || ! @@auth[auth_id]) && keypair = unlock_private_key(private_key, config)
|
171
171
|
@@auth[auth_id] = keypair
|
172
172
|
end
|
173
173
|
config[:keypair] = @@auth[auth_id] # Reset so caller can access updated keypair
|
@@ -2,11 +2,12 @@
|
|
2
2
|
module Nucleon
|
3
3
|
module Extension
|
4
4
|
class Project < Nucleon.plugin_class(:nucleon, :extension)
|
5
|
-
|
5
|
+
|
6
6
|
def manager_plugin_provider(config)
|
7
7
|
if config[:namespace] == :nucleon && config[:type] == :project
|
8
|
-
if config[:directory]
|
9
|
-
|
8
|
+
if config[:directory]
|
9
|
+
project_info = Nucleon::Plugin::Project.load_project_info(config[:directory])
|
10
|
+
return project_info[:provider] unless project_info.empty?
|
10
11
|
end
|
11
12
|
end
|
12
13
|
nil
|
@@ -6,79 +6,79 @@ nucleon_require(File.dirname(__FILE__), :git)
|
|
6
6
|
module Nucleon
|
7
7
|
module Project
|
8
8
|
class Github < Git
|
9
|
-
|
9
|
+
|
10
10
|
#-----------------------------------------------------------------------------
|
11
11
|
# Project plugin interface
|
12
|
-
|
13
|
-
def normalize(reload)
|
12
|
+
|
13
|
+
def normalize(reload)
|
14
14
|
if reference = delete(:reference, nil)
|
15
15
|
myself.plugin_name = normalize_reference(reference)
|
16
16
|
else
|
17
17
|
if url = get(:url, nil)
|
18
18
|
myself.plugin_name = url
|
19
19
|
set(:url, myself.class.expand_url(url, get(:ssh, false)))
|
20
|
-
end
|
21
|
-
end
|
20
|
+
end
|
21
|
+
end
|
22
22
|
super
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
#---
|
26
|
-
|
26
|
+
|
27
27
|
def set_connection
|
28
28
|
require 'octokit'
|
29
|
-
|
29
|
+
|
30
30
|
@client = Octokit::Client.new :netrc => true
|
31
31
|
@client.login
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
#-----------------------------------------------------------------------------
|
35
35
|
# Property accessor / modifiers
|
36
|
-
|
36
|
+
|
37
37
|
def client
|
38
38
|
set_connection unless @client
|
39
39
|
@client
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
#-----------------------------------------------------------------------------
|
43
43
|
# Project operations
|
44
|
-
|
44
|
+
|
45
45
|
def init_auth
|
46
46
|
super do
|
47
47
|
external_ip = Nucleon.ip_address
|
48
48
|
internal_ip = get(:internal_ip, nil)
|
49
|
-
|
49
|
+
|
50
50
|
if internal_ip && internal_ip.to_s != external_ip
|
51
51
|
location = "#{external_ip}[#{internal_ip}]"
|
52
52
|
else
|
53
53
|
location = external_ip
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
key_id = ENV['USER'] + '@' + location
|
57
57
|
ssh_key = public_key_str
|
58
|
-
|
58
|
+
|
59
59
|
if private_key && ssh_key
|
60
60
|
deploy_keys = client.deploy_keys(plugin_name)
|
61
61
|
github_id = nil
|
62
62
|
keys_match = true
|
63
|
-
|
63
|
+
|
64
64
|
deploy_keys.each do |key_resource|
|
65
65
|
if key_resource.title == key_id
|
66
|
-
github_id = key_resource.id
|
66
|
+
github_id = key_resource.id
|
67
67
|
keys_match = false if key_resource.key != ssh_key
|
68
68
|
break
|
69
|
-
end
|
69
|
+
end
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
client.remove_deploy_key(myself.plugin_name, github_id) if github_id && ! keys_match
|
73
73
|
client.add_deploy_key(myself.plugin_name, key_id, ssh_key)
|
74
74
|
verify_key
|
75
75
|
end
|
76
|
-
end
|
76
|
+
end
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
#-----------------------------------------------------------------------------
|
80
80
|
# Utilities
|
81
|
-
|
81
|
+
|
82
82
|
def self.expand_url(path, editable = false)
|
83
83
|
if path =~ /^[a-zA-Z0-9_\-\/]+$/
|
84
84
|
if editable
|
@@ -92,19 +92,19 @@ class Github < Git
|
|
92
92
|
else
|
93
93
|
url = path
|
94
94
|
end
|
95
|
-
url
|
95
|
+
url
|
96
96
|
end
|
97
|
-
|
97
|
+
|
98
98
|
#---
|
99
|
-
|
99
|
+
|
100
100
|
def verify_key
|
101
101
|
Util::SSH.init_session('github.com', 'git', 22, private_key)
|
102
102
|
Util::SSH.close('github.com', 'git')
|
103
103
|
end
|
104
104
|
protected :verify_key
|
105
|
-
|
105
|
+
|
106
106
|
#---
|
107
|
-
|
107
|
+
|
108
108
|
def normalize_reference(reference)
|
109
109
|
reference.sub(/^(git\@|(https?|git)\:\/\/)[^\/\:]+(\/|\:)?/, '').sub(/\.git$/, '')
|
110
110
|
end
|
data/nucleon.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: nucleon 0.2.
|
5
|
+
# stub: nucleon 0.2.7 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "nucleon"
|
9
|
-
s.version = "0.2.
|
9
|
+
s.version = "0.2.7"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Adrian Webb"]
|
14
|
-
s.date = "2015-01-
|
14
|
+
s.date = "2015-01-19"
|
15
15
|
s.description = "\nA framework that provides a simple foundation for building Ruby applications that are:\n\n* Highly configurable (with both distributed and persistent configurations)\n* Extremely pluggable and extendable\n* Easily parallel\n\nNote: This framework is still very early in development!\n"
|
16
16
|
s.email = "adrian.webb@coralnexus.com"
|
17
17
|
s.executables = ["nucleon"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nucleon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrian Webb
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: log4r
|