nucleon 0.1.1 → 0.1.2
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.
- data/Gemfile.lock +2 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/nucleon +1 -53
- data/lib/core/core.rb +21 -3
- data/lib/core/facade.rb +146 -53
- data/lib/core/gems.rb +16 -13
- data/lib/core/manager.rb +67 -51
- data/lib/core/mixin/action/commit.rb +19 -25
- data/lib/core/mixin/action/project.rb +28 -16
- data/lib/core/mixin/action/push.rb +11 -21
- data/lib/core/plugin/action.rb +26 -14
- data/lib/core/plugin/base.rb +6 -4
- data/lib/core/util/cli.rb +20 -8
- data/lib/core/util/data.rb +0 -8
- data/lib/nucleon.rb +3 -161
- data/lib/nucleon/action/add.rb +28 -34
- data/lib/nucleon/action/create.rb +23 -28
- data/lib/nucleon/action/extract.rb +3 -3
- data/lib/nucleon/action/remove.rb +30 -26
- data/lib/nucleon/action/save.rb +26 -26
- data/lib/nucleon/action/update.rb +13 -18
- data/lib/nucleon/project/git.rb +2 -2
- data/lib/nucleon_base.rb +184 -0
- data/locales/en.yml +47 -41
- data/nucleon.gemspec +3 -2
- metadata +31 -30
@@ -1,10 +1,10 @@
|
|
1
1
|
|
2
2
|
module Nucleon
|
3
3
|
module Action
|
4
|
-
class Extract <
|
4
|
+
class Extract < Nucleon.plugin_class(:action)
|
5
5
|
|
6
6
|
#-----------------------------------------------------------------------------
|
7
|
-
#
|
7
|
+
# Settings
|
8
8
|
|
9
9
|
def configure
|
10
10
|
super do
|
@@ -35,7 +35,7 @@ class Extract < Plugin::Action
|
|
35
35
|
end
|
36
36
|
|
37
37
|
#-----------------------------------------------------------------------------
|
38
|
-
#
|
38
|
+
# Operations
|
39
39
|
|
40
40
|
def execute
|
41
41
|
super do |node, network|
|
@@ -1,49 +1,53 @@
|
|
1
1
|
|
2
2
|
module Nucleon
|
3
3
|
module Action
|
4
|
-
class Remove <
|
4
|
+
class Remove < Nucleon.plugin_class(:action)
|
5
5
|
|
6
6
|
include Mixin::Action::Project
|
7
7
|
include Mixin::Action::Push
|
8
8
|
|
9
9
|
#-----------------------------------------------------------------------------
|
10
|
-
#
|
10
|
+
# Settings
|
11
11
|
|
12
|
-
def
|
13
|
-
super
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
def configure
|
13
|
+
super do
|
14
|
+
codes :project_failure,
|
15
|
+
:delete_failure,
|
16
|
+
:push_failure
|
17
|
+
|
18
|
+
register :sub_path, :str, nil
|
19
|
+
|
20
|
+
project_config
|
21
|
+
push_config
|
22
|
+
end
|
18
23
|
end
|
19
|
-
|
20
|
-
#-----------------------------------------------------------------------------
|
21
|
-
# Action operations
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
project_options(parser, true, true)
|
28
|
-
push_options(parser, true)
|
25
|
+
#---
|
26
|
+
|
27
|
+
def ignore
|
28
|
+
[ :project_reference ]
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
def arguments
|
32
|
+
[ :sub_path ]
|
33
|
+
end
|
34
|
+
|
35
|
+
#-----------------------------------------------------------------------------
|
36
|
+
# Operations
|
37
|
+
|
33
38
|
def execute
|
34
|
-
super do |node, network
|
35
|
-
info('nucleon.
|
39
|
+
super do |node, network|
|
40
|
+
info('nucleon.actions.remove.start')
|
36
41
|
|
37
42
|
if project = project_load(Dir.pwd, false)
|
38
43
|
if project.delete_subproject(settings[:sub_path])
|
39
|
-
status = code.push_failure unless push(project)
|
44
|
+
myself.status = code.push_failure unless push(project)
|
40
45
|
else
|
41
|
-
status = code.delete_failure
|
46
|
+
myself.status = code.delete_failure
|
42
47
|
end
|
43
48
|
else
|
44
|
-
status = code.project_failure
|
45
|
-
end
|
46
|
-
status
|
49
|
+
myself.status = code.project_failure
|
50
|
+
end
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
data/lib/nucleon/action/save.rb
CHANGED
@@ -1,51 +1,51 @@
|
|
1
1
|
|
2
2
|
module Nucleon
|
3
3
|
module Action
|
4
|
-
class Save <
|
4
|
+
class Save < Nucleon.plugin_class(:action)
|
5
5
|
|
6
6
|
include Mixin::Action::Project
|
7
7
|
include Mixin::Action::Commit
|
8
8
|
include Mixin::Action::Push
|
9
9
|
|
10
10
|
#-----------------------------------------------------------------------------
|
11
|
-
#
|
11
|
+
# Settings
|
12
12
|
|
13
|
-
def
|
14
|
-
super
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
parser.arg_array(:files, '.',
|
26
|
-
'nucleon.core.actions.save.options.files'
|
27
|
-
)
|
28
|
-
project_options(parser, true, false)
|
29
|
-
commit_options(parser, false)
|
30
|
-
push_options(parser, true)
|
13
|
+
def configure
|
14
|
+
super do
|
15
|
+
codes :project_failure,
|
16
|
+
:commit_failure,
|
17
|
+
:push_failure
|
18
|
+
|
19
|
+
register :files, :array, '.'
|
20
|
+
|
21
|
+
project_config
|
22
|
+
commit_config(false)
|
23
|
+
push_config
|
24
|
+
end
|
31
25
|
end
|
32
26
|
|
33
27
|
#---
|
28
|
+
|
29
|
+
def arguments
|
30
|
+
[ :files ]
|
31
|
+
end
|
32
|
+
|
33
|
+
#-----------------------------------------------------------------------------
|
34
|
+
# Operations
|
34
35
|
|
35
36
|
def execute
|
36
|
-
super do |node, network
|
37
|
-
info('nucleon.
|
37
|
+
super do |node, network|
|
38
|
+
info('nucleon.actions.save.start')
|
38
39
|
|
39
40
|
if project = project_load(Dir.pwd, false)
|
40
41
|
if commit(project, settings[:files])
|
41
|
-
status = code.push_failure unless push(project)
|
42
|
+
myself.status = code.push_failure unless push(project)
|
42
43
|
else
|
43
|
-
status = code.commit_failure
|
44
|
+
myself.status = code.commit_failure
|
44
45
|
end
|
45
46
|
else
|
46
|
-
status = code.project_failure
|
47
|
+
myself.status = code.project_failure
|
47
48
|
end
|
48
|
-
status
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -1,35 +1,30 @@
|
|
1
1
|
|
2
2
|
module Nucleon
|
3
3
|
module Action
|
4
|
-
class Update <
|
4
|
+
class Update < Nucleon.plugin_class(:action)
|
5
5
|
|
6
6
|
include Mixin::Action::Project
|
7
7
|
|
8
8
|
#-----------------------------------------------------------------------------
|
9
|
-
#
|
9
|
+
# Settings
|
10
10
|
|
11
|
-
def
|
12
|
-
super
|
13
|
-
|
14
|
-
|
11
|
+
def configure
|
12
|
+
super do
|
13
|
+
codes :project_failure
|
14
|
+
|
15
|
+
project_options
|
16
|
+
end
|
15
17
|
end
|
16
18
|
|
17
19
|
#-----------------------------------------------------------------------------
|
18
|
-
#
|
19
|
-
|
20
|
-
def parse(parser)
|
21
|
-
project_options(parser, true, true)
|
22
|
-
end
|
23
|
-
|
24
|
-
#---
|
20
|
+
# Operations
|
25
21
|
|
26
22
|
def execute
|
27
|
-
super do |node, network
|
28
|
-
info('nucleon.
|
23
|
+
super do |node, network|
|
24
|
+
info('nucleon.actions.update.start')
|
29
25
|
|
30
|
-
project
|
31
|
-
status
|
32
|
-
status
|
26
|
+
project = project_load(Dir.pwd, true)
|
27
|
+
myself.status = code.project_failure unless project
|
33
28
|
end
|
34
29
|
end
|
35
30
|
end
|
data/lib/nucleon/project/git.rb
CHANGED
@@ -399,7 +399,7 @@ class Git < Plugin::Project
|
|
399
399
|
:flags => flags,
|
400
400
|
:args => [ processed_remote, config.get(:revision, get(:revision, :master)) ]
|
401
401
|
}
|
402
|
-
}, config.get(:provider, :
|
402
|
+
}, config.get(:provider, :bash)).exec(config) do |op, command, data|
|
403
403
|
block_given? ? yield(op, command, data) : true
|
404
404
|
end
|
405
405
|
|
@@ -430,7 +430,7 @@ class Git < Plugin::Project
|
|
430
430
|
:flags => flags,
|
431
431
|
:args => [ processed_remote, push_branch ]
|
432
432
|
}
|
433
|
-
}, config.get(:provider, :
|
433
|
+
}, config.get(:provider, :bash)).exec(config) do |op, command, data|
|
434
434
|
block_given? ? yield(op, command, data) : true
|
435
435
|
end
|
436
436
|
|
data/lib/nucleon_base.rb
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
|
2
|
+
#*******************************************************************************
|
3
|
+
# Nucleon
|
4
|
+
#
|
5
|
+
# Framework that provides a simple foundation for building distributively
|
6
|
+
# configured, extremely pluggable and extendable, and easily parallel
|
7
|
+
# applications.
|
8
|
+
#
|
9
|
+
# Author:: Adrian Webb (mailto:adrian.webb@coralnexus.com)
|
10
|
+
# License:: GPLv3
|
11
|
+
|
12
|
+
#-------------------------------------------------------------------------------
|
13
|
+
# Global namespace
|
14
|
+
|
15
|
+
module Kernel
|
16
|
+
|
17
|
+
def dbg(data, label = '')
|
18
|
+
# Invocations of this function should NOT be committed to the project
|
19
|
+
require 'pp'
|
20
|
+
|
21
|
+
puts '>>----------------------'
|
22
|
+
unless ! label || label.empty?
|
23
|
+
puts label
|
24
|
+
puts '---'
|
25
|
+
end
|
26
|
+
pp data
|
27
|
+
puts '<<'
|
28
|
+
end
|
29
|
+
|
30
|
+
#---
|
31
|
+
|
32
|
+
def nucleon_locate(command)
|
33
|
+
command = command.to_s
|
34
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
35
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
36
|
+
exts.each do |ext|
|
37
|
+
exe = File.join(path, "#{command}#{ext}")
|
38
|
+
return exe if File.executable?(exe)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
return nil
|
42
|
+
end
|
43
|
+
|
44
|
+
#---
|
45
|
+
|
46
|
+
def nucleon_require(base_dir, name)
|
47
|
+
name = name.to_s
|
48
|
+
top_level_file = File.join(base_dir, "#{name}.rb")
|
49
|
+
|
50
|
+
require top_level_file if File.exists?(top_level_file)
|
51
|
+
|
52
|
+
directory = File.join(base_dir, name)
|
53
|
+
|
54
|
+
if File.directory?(directory)
|
55
|
+
Dir.glob(File.join(directory, '**', '*.rb')).each do |sub_file|
|
56
|
+
require sub_file
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
#-------------------------------------------------------------------------------
|
63
|
+
# Load paths
|
64
|
+
|
65
|
+
lib_dir = File.dirname(__FILE__)
|
66
|
+
core_dir = File.join(lib_dir, 'core')
|
67
|
+
mixin_dir = File.join(core_dir, 'mixin')
|
68
|
+
mixin_config_dir = File.join(mixin_dir, 'config')
|
69
|
+
mixin_action_dir = File.join(mixin_dir, 'action')
|
70
|
+
macro_dir = File.join(mixin_dir, 'macro')
|
71
|
+
util_dir = File.join(core_dir, 'util')
|
72
|
+
mod_dir = File.join(core_dir, 'mod')
|
73
|
+
plugin_dir = File.join(core_dir, 'plugin')
|
74
|
+
|
75
|
+
#-------------------------------------------------------------------------------
|
76
|
+
# Coral requirements
|
77
|
+
|
78
|
+
$:.unshift(lib_dir) unless $:.include?(lib_dir) || $:.include?(File.expand_path(lib_dir))
|
79
|
+
|
80
|
+
#---
|
81
|
+
|
82
|
+
require 'rubygems'
|
83
|
+
|
84
|
+
require 'optparse'
|
85
|
+
require 'pp'
|
86
|
+
require 'i18n'
|
87
|
+
require 'log4r'
|
88
|
+
require 'log4r/configurator'
|
89
|
+
require 'deep_merge'
|
90
|
+
|
91
|
+
require 'digest/sha1'
|
92
|
+
require 'base64'
|
93
|
+
|
94
|
+
require 'yaml'
|
95
|
+
require 'multi_json'
|
96
|
+
|
97
|
+
require 'thread' # Eventually depreciated
|
98
|
+
require 'celluloid'
|
99
|
+
require 'celluloid/autostart'
|
100
|
+
|
101
|
+
#---
|
102
|
+
|
103
|
+
# TODO: Make this dynamically settable
|
104
|
+
|
105
|
+
I18n.enforce_available_locales = false
|
106
|
+
I18n.load_path << File.expand_path(File.join('..', 'locales', 'en.yml'), lib_dir)
|
107
|
+
|
108
|
+
#---
|
109
|
+
|
110
|
+
if nucleon_locate('git')
|
111
|
+
require 'grit'
|
112
|
+
nucleon_require(util_dir, :git)
|
113
|
+
end
|
114
|
+
|
115
|
+
#---
|
116
|
+
|
117
|
+
# Make sure logger is at the top of our load order priorities
|
118
|
+
nucleon_require(util_dir, :logger)
|
119
|
+
|
120
|
+
#---
|
121
|
+
|
122
|
+
# Object modifications (100% pure monkey patches)
|
123
|
+
Dir.glob(File.join(mod_dir, '*.rb')).each do |file|
|
124
|
+
require file
|
125
|
+
end
|
126
|
+
|
127
|
+
#---
|
128
|
+
|
129
|
+
# Mixins for classes
|
130
|
+
Dir.glob(File.join(mixin_dir, '*.rb')).each do |file|
|
131
|
+
require file
|
132
|
+
end
|
133
|
+
Dir.glob(File.join(mixin_config_dir, '*.rb')).each do |file|
|
134
|
+
require file
|
135
|
+
end
|
136
|
+
Dir.glob(File.join(mixin_action_dir, '*.rb')).each do |file|
|
137
|
+
require file
|
138
|
+
end
|
139
|
+
Dir.glob(File.join(macro_dir, '*.rb')).each do |file|
|
140
|
+
require file
|
141
|
+
end
|
142
|
+
|
143
|
+
#---
|
144
|
+
|
145
|
+
# Include bootstrap classes
|
146
|
+
nucleon_require(core_dir, :errors)
|
147
|
+
nucleon_require(core_dir, :codes)
|
148
|
+
nucleon_require(util_dir, :data)
|
149
|
+
nucleon_require(core_dir, :config)
|
150
|
+
nucleon_require(util_dir, :console)
|
151
|
+
nucleon_require(core_dir, :core)
|
152
|
+
|
153
|
+
#---
|
154
|
+
|
155
|
+
# Include core utilities
|
156
|
+
[ :liquid,
|
157
|
+
:cli,
|
158
|
+
:disk,
|
159
|
+
:package,
|
160
|
+
:shell
|
161
|
+
].each do |name|
|
162
|
+
nucleon_require(util_dir, name)
|
163
|
+
end
|
164
|
+
|
165
|
+
# Include plugin system
|
166
|
+
nucleon_require(core_dir, :facade)
|
167
|
+
nucleon_require(core_dir, :gems)
|
168
|
+
nucleon_require(core_dir, :manager)
|
169
|
+
nucleon_require(plugin_dir, :base)
|
170
|
+
nucleon_require(core_dir, :plugin)
|
171
|
+
|
172
|
+
#-------------------------------------------------------------------------------
|
173
|
+
# Core interface
|
174
|
+
|
175
|
+
module Nucleon
|
176
|
+
|
177
|
+
def self.VERSION
|
178
|
+
File.read(File.join(File.dirname(__FILE__), '..', 'VERSION'))
|
179
|
+
end
|
180
|
+
|
181
|
+
#-----------------------------------------------------------------------------
|
182
|
+
|
183
|
+
extend Facade
|
184
|
+
end
|
data/locales/en.yml
CHANGED
@@ -1,14 +1,24 @@
|
|
1
1
|
en:
|
2
2
|
nucleon:
|
3
|
-
errors:
|
4
|
-
batch_error: |-
|
5
|
-
An issue was encountered during batch processing
|
6
3
|
core:
|
4
|
+
exec:
|
5
|
+
help:
|
6
|
+
usage: |-
|
7
|
+
Usage
|
8
|
+
header: |-
|
9
|
+
Available actions
|
10
|
+
footer: |-
|
11
|
+
For help on any individual action run `corl <action> -h`
|
12
|
+
errors:
|
13
|
+
missing_argument: |-
|
14
|
+
Argument <%{name}> must be specified
|
7
15
|
util:
|
8
16
|
cli:
|
9
17
|
options:
|
10
|
-
|
11
|
-
Display help information for this command
|
18
|
+
short_help: |-
|
19
|
+
Display brief help information for this command
|
20
|
+
extended_help: |-
|
21
|
+
Display a more extended breakdown of available options for this commands available actions
|
12
22
|
log_level: |-
|
13
23
|
Set the logging level for this execution run
|
14
24
|
encoded: |-
|
@@ -16,42 +26,38 @@ en:
|
|
16
26
|
parse:
|
17
27
|
error: |-
|
18
28
|
There was a problem with the command arguments given
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
remote: |-
|
52
|
-
Remote name to push to (default %{default_value})
|
53
|
-
revision: |-
|
54
|
-
Branch to push (default %{default_value})
|
29
|
+
mixin:
|
30
|
+
action:
|
31
|
+
project:
|
32
|
+
options:
|
33
|
+
project_provider: |-
|
34
|
+
Plugin provider to use for this project (default %{default_value})
|
35
|
+
project_reference: |-
|
36
|
+
Project URL or reference string to set as primary remote (default %{default_value})
|
37
|
+
revision: |-
|
38
|
+
Revision or branch to load (default %{default_value})
|
39
|
+
commit:
|
40
|
+
options:
|
41
|
+
commit: |-
|
42
|
+
Commit any uncommitted changes (default %{default_value})
|
43
|
+
allow_empty: |-
|
44
|
+
Allow commits with no changes (default %{default_value})
|
45
|
+
message: |-
|
46
|
+
Commit message (defaults to auto generated commit information)
|
47
|
+
author: |-
|
48
|
+
Author of the changes being committed if different from the committer
|
49
|
+
propogate_commit: |-
|
50
|
+
Propogate commits throughout the project tree (default %{default_value})
|
51
|
+
push:
|
52
|
+
options:
|
53
|
+
push: |-
|
54
|
+
Push changes to remote server (default %{default_value})
|
55
|
+
remote: |-
|
56
|
+
Remote name to push to (default %{default_value})
|
57
|
+
revision: |-
|
58
|
+
Branch to push (default %{default_value})
|
59
|
+
propogate_push: |-
|
60
|
+
Propogate pushes to the remote throughout the project tree (default %{default_value})
|
55
61
|
actions:
|
56
62
|
extract:
|
57
63
|
options:
|