nucleon 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/core/config.rb +1 -1
  4. data/lib/core/core.rb +2 -2
  5. data/lib/core/environment.rb +9 -6
  6. data/lib/core/facade.rb +2 -2
  7. data/lib/core/gems.rb +13 -6
  8. data/lib/core/manager.rb +12 -5
  9. data/lib/core/mixin/action/commit.rb +12 -6
  10. data/lib/core/mixin/action/project.rb +15 -28
  11. data/lib/core/mixin/action/push.rb +14 -5
  12. data/lib/core/mixin/action/registration.rb +277 -28
  13. data/lib/core/mixin/macro/object_interface.rb +3 -3
  14. data/lib/core/mixin/sub_config.rb +1 -1
  15. data/lib/core/plugin/action.rb +20 -51
  16. data/lib/core/plugin/base.rb +41 -8
  17. data/lib/core/plugin/project.rb +55 -8
  18. data/lib/nucleon/action/project/add.rb +6 -20
  19. data/lib/nucleon/action/project/create.rb +2 -2
  20. data/lib/nucleon/action/project/remove.rb +3 -3
  21. data/lib/nucleon/action/project/save.rb +3 -3
  22. data/lib/nucleon/action/project/update.rb +2 -2
  23. data/lib/nucleon/extension/project.rb +16 -0
  24. data/lib/nucleon/project/git.rb +1 -0
  25. data/lib/nucleon/project/github.rb +19 -7
  26. data/nucleon.gemspec +120 -2
  27. data/rdoc/site/0.2.1/ARCHITECTURE_rdoc.html +640 -0
  28. data/rdoc/site/0.2.1/Hash.html +353 -0
  29. data/rdoc/site/0.2.1/Kernel.html +420 -0
  30. data/rdoc/site/0.2.1/Nucleon.html +674 -0
  31. data/rdoc/site/0.2.1/Nucleon/Action.html +286 -0
  32. data/rdoc/site/0.2.1/Nucleon/Action/Extract.html +457 -0
  33. data/rdoc/site/0.2.1/Nucleon/Action/Project.html +285 -0
  34. data/rdoc/site/0.2.1/Nucleon/Action/Project/Add.html +502 -0
  35. data/rdoc/site/0.2.1/Nucleon/Action/Project/Create.html +459 -0
  36. data/rdoc/site/0.2.1/Nucleon/Action/Project/Remove.html +505 -0
  37. data/rdoc/site/0.2.1/Nucleon/Action/Project/Save.html +478 -0
  38. data/rdoc/site/0.2.1/Nucleon/Action/Project/Update.html +425 -0
  39. data/rdoc/site/0.2.1/Nucleon/Codes.html +569 -0
  40. data/rdoc/site/0.2.1/Nucleon/Command.html +281 -0
  41. data/rdoc/site/0.2.1/Nucleon/Command/Bash.html +550 -0
  42. data/rdoc/site/0.2.1/Nucleon/Config.html +1634 -0
  43. data/rdoc/site/0.2.1/Nucleon/Config/Collection.html +515 -0
  44. data/rdoc/site/0.2.1/Nucleon/Config/Options.html +495 -0
  45. data/rdoc/site/0.2.1/Nucleon/Core.html +641 -0
  46. data/rdoc/site/0.2.1/Nucleon/Environment.html +1210 -0
  47. data/rdoc/site/0.2.1/Nucleon/Errors.html +281 -0
  48. data/rdoc/site/0.2.1/Nucleon/Errors/BatchError.html +287 -0
  49. data/rdoc/site/0.2.1/Nucleon/Errors/NucleonError.html +663 -0
  50. data/rdoc/site/0.2.1/Nucleon/Errors/SSHUnavailable.html +287 -0
  51. data/rdoc/site/0.2.1/Nucleon/Event.html +281 -0
  52. data/rdoc/site/0.2.1/Nucleon/Event/Regex.html +473 -0
  53. data/rdoc/site/0.2.1/Nucleon/Facade.html +2452 -0
  54. data/rdoc/site/0.2.1/Nucleon/Gems.html +641 -0
  55. data/rdoc/site/0.2.1/Nucleon/Manager.html +1862 -0
  56. data/rdoc/site/0.2.1/Nucleon/Mixin.html +291 -0
  57. data/rdoc/site/0.2.1/Nucleon/Mixin/Action.html +284 -0
  58. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Commit.html +387 -0
  59. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Project.html +401 -0
  60. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Push.html +377 -0
  61. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Registration.html +575 -0
  62. data/rdoc/site/0.2.1/Nucleon/Mixin/Colors.html +551 -0
  63. data/rdoc/site/0.2.1/Nucleon/Mixin/ConfigCollection.html +487 -0
  64. data/rdoc/site/0.2.1/Nucleon/Mixin/ConfigOptions.html +455 -0
  65. data/rdoc/site/0.2.1/Nucleon/Mixin/Macro.html +282 -0
  66. data/rdoc/site/0.2.1/Nucleon/Mixin/Macro/ObjectInterface.html +701 -0
  67. data/rdoc/site/0.2.1/Nucleon/Mixin/Macro/PluginInterface.html +688 -0
  68. data/rdoc/site/0.2.1/Nucleon/Mixin/Settings.html +487 -0
  69. data/rdoc/site/0.2.1/Nucleon/Mixin/SubConfig.html +893 -0
  70. data/rdoc/site/0.2.1/Nucleon/Parallel.html +332 -0
  71. data/rdoc/site/0.2.1/Nucleon/Parallel/ClassMethods.html +331 -0
  72. data/rdoc/site/0.2.1/Nucleon/Parallel/InstanceMethods.html +458 -0
  73. data/rdoc/site/0.2.1/Nucleon/Plugin.html +288 -0
  74. data/rdoc/site/0.2.1/Nucleon/Plugin/Action.html +2133 -0
  75. data/rdoc/site/0.2.1/Nucleon/Plugin/Action/Option.html +465 -0
  76. data/rdoc/site/0.2.1/Nucleon/Plugin/Base.html +1988 -0
  77. data/rdoc/site/0.2.1/Nucleon/Plugin/Command.html +765 -0
  78. data/rdoc/site/0.2.1/Nucleon/Plugin/Event.html +448 -0
  79. data/rdoc/site/0.2.1/Nucleon/Plugin/Extension.html +287 -0
  80. data/rdoc/site/0.2.1/Nucleon/Plugin/Project.html +2900 -0
  81. data/rdoc/site/0.2.1/Nucleon/Plugin/Template.html +482 -0
  82. data/rdoc/site/0.2.1/Nucleon/Plugin/Translator.html +377 -0
  83. data/rdoc/site/0.2.1/Nucleon/Project.html +282 -0
  84. data/rdoc/site/0.2.1/Nucleon/Project/Git.html +1807 -0
  85. data/rdoc/site/0.2.1/Nucleon/Project/Github.html +555 -0
  86. data/rdoc/site/0.2.1/Nucleon/Template.html +283 -0
  87. data/rdoc/site/0.2.1/Nucleon/Template/JSON.html +335 -0
  88. data/rdoc/site/0.2.1/Nucleon/Template/Wrapper.html +335 -0
  89. data/rdoc/site/0.2.1/Nucleon/Template/YAML.html +335 -0
  90. data/rdoc/site/0.2.1/Nucleon/Translator.html +282 -0
  91. data/rdoc/site/0.2.1/Nucleon/Translator/JSON.html +372 -0
  92. data/rdoc/site/0.2.1/Nucleon/Translator/YAML.html +372 -0
  93. data/rdoc/site/0.2.1/Nucleon/Util.html +291 -0
  94. data/rdoc/site/0.2.1/Nucleon/Util/CLI.html +394 -0
  95. data/rdoc/site/0.2.1/Nucleon/Util/CLI/Parser.html +1404 -0
  96. data/rdoc/site/0.2.1/Nucleon/Util/Cache.html +824 -0
  97. data/rdoc/site/0.2.1/Nucleon/Util/Console.html +1330 -0
  98. data/rdoc/site/0.2.1/Nucleon/Util/Data.html +1423 -0
  99. data/rdoc/site/0.2.1/Nucleon/Util/Disk.html +528 -0
  100. data/rdoc/site/0.2.1/Nucleon/Util/Git.html +367 -0
  101. data/rdoc/site/0.2.1/Nucleon/Util/Liquid.html +371 -0
  102. data/rdoc/site/0.2.1/Nucleon/Util/Logger.html +822 -0
  103. data/rdoc/site/0.2.1/Nucleon/Util/Package.html +564 -0
  104. data/rdoc/site/0.2.1/Nucleon/Util/SSH.html +1036 -0
  105. data/rdoc/site/0.2.1/Nucleon/Util/SSH/Keypair.html +607 -0
  106. data/rdoc/site/0.2.1/Nucleon/Util/Shell.html +697 -0
  107. data/rdoc/site/0.2.1/Nucleon/Util/Shell/Result.html +503 -0
  108. data/rdoc/site/0.2.1/README_rdoc.html +318 -0
  109. data/rdoc/site/0.2.1/TODO_rdoc.html +267 -0
  110. data/rdoc/site/0.2.1/created.rid +62 -0
  111. data/rdoc/site/0.2.1/images/add.png +0 -0
  112. data/rdoc/site/0.2.1/images/brick.png +0 -0
  113. data/rdoc/site/0.2.1/images/brick_link.png +0 -0
  114. data/rdoc/site/0.2.1/images/bug.png +0 -0
  115. data/rdoc/site/0.2.1/images/bullet_black.png +0 -0
  116. data/rdoc/site/0.2.1/images/bullet_toggle_minus.png +0 -0
  117. data/rdoc/site/0.2.1/images/bullet_toggle_plus.png +0 -0
  118. data/rdoc/site/0.2.1/images/date.png +0 -0
  119. data/rdoc/site/0.2.1/images/delete.png +0 -0
  120. data/rdoc/site/0.2.1/images/find.png +0 -0
  121. data/rdoc/site/0.2.1/images/loadingAnimation.gif +0 -0
  122. data/rdoc/site/0.2.1/images/macFFBgHack.png +0 -0
  123. data/rdoc/site/0.2.1/images/package.png +0 -0
  124. data/rdoc/site/0.2.1/images/page_green.png +0 -0
  125. data/rdoc/site/0.2.1/images/page_white_text.png +0 -0
  126. data/rdoc/site/0.2.1/images/page_white_width.png +0 -0
  127. data/rdoc/site/0.2.1/images/plugin.png +0 -0
  128. data/rdoc/site/0.2.1/images/ruby.png +0 -0
  129. data/rdoc/site/0.2.1/images/tag_blue.png +0 -0
  130. data/rdoc/site/0.2.1/images/tag_green.png +0 -0
  131. data/rdoc/site/0.2.1/images/transparent.png +0 -0
  132. data/rdoc/site/0.2.1/images/wrench.png +0 -0
  133. data/rdoc/site/0.2.1/images/wrench_orange.png +0 -0
  134. data/rdoc/site/0.2.1/images/zoom.png +0 -0
  135. data/rdoc/site/0.2.1/index.html +317 -0
  136. data/rdoc/site/0.2.1/js/darkfish.js +155 -0
  137. data/rdoc/site/0.2.1/js/jquery.js +18 -0
  138. data/rdoc/site/0.2.1/js/navigation.js +142 -0
  139. data/rdoc/site/0.2.1/js/search.js +94 -0
  140. data/rdoc/site/0.2.1/js/search_index.js +1 -0
  141. data/rdoc/site/0.2.1/js/searcher.js +228 -0
  142. data/rdoc/site/0.2.1/rdoc.css +543 -0
  143. data/rdoc/site/0.2.1/table_of_contents.html +1718 -0
  144. metadata +120 -2
@@ -291,11 +291,11 @@ module ObjectInterface
291
291
  if group_options.has_key?(:settings)
292
292
  group_options = add_settings.call(group_options, group_options[:settings])
293
293
  end
294
- local_options = Util::Data.merge([ local_options, group_options ], true)
294
+ local_options = Util::Data.merge([ local_options, group_options ], true, false)
295
295
  end
296
296
  end
297
297
  unless local_options.empty?
298
- final_options = Util::Data.merge([ local_options, final_options ], true)
298
+ final_options = Util::Data.merge([ local_options, final_options ], true, false)
299
299
  end
300
300
  end
301
301
  final_options
@@ -332,7 +332,7 @@ module ObjectInterface
332
332
  final_config = Config.new(Util::Data.merge([
333
333
  Util::Data.clean(settings),
334
334
  Util::Data.clean(obj_config.export)
335
- ], true))
335
+ ], true, false))
336
336
  value = final_config.get(keys)
337
337
 
338
338
  logger.debug("Final configuration: #{final_config.export.inspect}")
@@ -15,7 +15,7 @@ module SubConfig
15
15
  return if @subconfig_initialized && ! reset
16
16
 
17
17
  unless @config
18
- @config = Config.new
18
+ @config = Config.new({}, {}, true, false)
19
19
  end
20
20
 
21
21
  @subconfig_initialized = true
@@ -5,6 +5,8 @@ class Action < Nucleon.plugin_class(:nucleon, :base)
5
5
 
6
6
  extend Mixin::Colors
7
7
 
8
+ include Mixin::Action::Registration
9
+
8
10
  #-----------------------------------------------------------------------------
9
11
  # Info
10
12
 
@@ -12,14 +14,20 @@ class Action < Nucleon.plugin_class(:nucleon, :base)
12
14
  describe_base(group, action, weight, description, help)
13
15
  end
14
16
 
15
- def self.describe_base(group = nil, action = 'unknown', weight = -1000, description = nil, help = nil)
16
- if group
17
- group_name = Util::Data.array(group).join('.')
18
- description_id = "#{namespace}.action.#{group_name}.#{action}.description"
19
- help_id = "#{namespace}.action.#{group_name}.#{action}.help"
17
+ def self.describe_base(group = nil, action = 'unknown', weight = -1000, description = nil, help = nil, provider_override = nil)
18
+ if provider_override
19
+ provider_override = provider_override.to_s.gsub('_', '.')
20
+ description_id = "#{namespace}.action.#{provider_override}.description"
21
+ help_id = "#{namespace}.action.#{provider_override}.help"
20
22
  else
21
- description_id = "#{namespace}.action.#{action}.description"
22
- help_id = "#{namespace}.action.#{action}.help"
23
+ if group
24
+ group_name = Util::Data.array(group).join('.')
25
+ description_id = "#{namespace}.action.#{group_name}.#{action}.description"
26
+ help_id = "#{namespace}.action.#{group_name}.#{action}.help"
27
+ else
28
+ description_id = "#{namespace}.action.#{action}.description"
29
+ help_id = "#{namespace}.action.#{action}.help"
30
+ end
23
31
  end
24
32
 
25
33
  {
@@ -207,28 +215,6 @@ class Action < Nucleon.plugin_class(:nucleon, :base)
207
215
 
208
216
  #---
209
217
 
210
- def register_bool(name, default = false, locale = nil, &code)
211
- register(name, :bool, default, locale, &code)
212
- end
213
-
214
- def register_int(name, default = nil, locale = nil, &code)
215
- register(name, :int, default, locale, &code)
216
- end
217
-
218
- def register_float(name, default = nil, locale = nil, &code)
219
- register(name, :float, default, locale, &code)
220
- end
221
-
222
- def register_str(name, default = '', locale = nil, &code)
223
- register(name, :str, default, locale, &code)
224
- end
225
-
226
- def register_array(name, default = [], locale = nil, &code)
227
- register(name, :array, default, locale, &code)
228
- end
229
-
230
- #---
231
-
232
218
  def remove(names)
233
219
  Util::Data.rm_keys(config, names)
234
220
  Util::Data.rm_keys(settings, names)
@@ -318,7 +304,7 @@ class Action < Nucleon.plugin_class(:nucleon, :base)
318
304
 
319
305
  help_text = ''
320
306
  action_info[:description][:help].split("\n").each do |line|
321
- help_text << ' ' + line + "\n"
307
+ help_text << ' ' + green(line) + "\n"
322
308
  end
323
309
 
324
310
  @parser = Util::CLI::Parser.new(args, usage, "\n#{help_text}\n") do |parser|
@@ -479,30 +465,13 @@ class Action < Nucleon.plugin_class(:nucleon, :base)
479
465
  # Output
480
466
 
481
467
  def render_options
482
- settings
468
+ options = super
469
+ options.merge(settings.export)
483
470
  end
484
471
 
485
472
  #-----------------------------------------------------------------------------
486
473
  # Utilities
487
-
488
- def validate_plugins(namespace, type, name, values)
489
- plugin_class = Nucleon.plugin_class(namespace, type)
490
- loaded_plugins = Nucleon.loaded_plugins(namespace, type)
491
- success = true
492
-
493
- array(values).each do |value|
494
- if info = plugin_class.translate_reference(value)
495
- if ! loaded_plugins.keys.include?(info[:provider].to_sym)
496
- warn("corl.action.#{plugin_name.to_s.gsub('_', '.')}.errors.#{name}", Util::Data.merge([ info, { :value => value } ]))
497
- success = false
498
- end
499
- end
500
- end
501
- success
502
- end
503
-
504
- #---
505
-
474
+
506
475
  def self.components(search)
507
476
  components = []
508
477
 
@@ -668,7 +637,7 @@ class Action < Nucleon.plugin_class(:nucleon, :base)
668
637
  namespace = info[:description][:namespace]
669
638
  group = info[:description][:group]
670
639
 
671
- group_id = group.is_a?(Array) ? group.flatten.join('::') : group
640
+ group_id = group.is_a?(Array) ? group.flatten.join('::') : group.to_s
672
641
  group_id = '' unless group_id
673
642
 
674
643
  output << "\n" if group_id != last_group
@@ -20,7 +20,7 @@ class Base < Core
20
20
  set_meta(config.delete(:meta, Config.new))
21
21
 
22
22
  # No logging statements above this line!!
23
- super(config.import({ :logger => "#{namespace}->#{plugin_type}->#{plugin_provider}" }), {}, true, false)
23
+ super(config.import({ :logger => "#{namespace}->#{plugin_type}->#{plugin_provider}" }), {}, true, false, false)
24
24
  myself.plugin_name = name
25
25
 
26
26
  logger.debug("Normalizing #{namespace} #{plugin_type} plugin #{plugin_name}")
@@ -219,18 +219,44 @@ class Base < Core
219
219
  #-----------------------------------------------------------------------------
220
220
  # Output
221
221
 
222
+ def render_provider
223
+ plugin_provider
224
+ end
225
+ protected :render_provider
226
+
227
+ #---
228
+
222
229
  def render_options
223
- export
230
+ export.merge({
231
+ :plugin_namespace => self.class.respond_to?(:namespace) ? self.class.namespace : plugin_namespace,
232
+ :plugin_type => plugin_type,
233
+ :plugin_provider => render_provider
234
+ })
224
235
  end
225
236
  protected :render_options
226
237
 
227
238
  #---
228
239
 
229
240
  def render_message(message, options = {})
230
- config = Config.ensure(options)
241
+ config = Config.ensure(options)
242
+ use_prefix = true
231
243
 
232
244
  if config.delete(:i18n, true)
233
- message = I18n.t(message, Util::Data.merge([ Config.ensure(render_options).export, config.export ], true))
245
+ Nucleon.namespaces.each do |namespace|
246
+ if message =~ /^#{namespace.to_s.downcase}\./
247
+ use_prefix = false
248
+ break
249
+ end
250
+ end
251
+
252
+ if use_prefix
253
+ plugin_namespace = self.class.namespace if self.class.respond_to?(:namespace)
254
+ operation_id = config.has_key?(:operation) ? config[:operation] : ''
255
+ prefix = "#{plugin_namespace}.#{plugin_type}.#{render_provider.to_s.gsub('_', '.')}."
256
+
257
+ message = prefix + ( operation_id.empty? ? '' : "#{operation_id}." ) + message.sub(/^#{prefix}/, '')
258
+ end
259
+ message = I18n.t(message, Util::Data.merge([ Config.ensure(render_options).export, config.export ], true))
234
260
  end
235
261
  message
236
262
  end
@@ -254,7 +280,7 @@ class Base < Core
254
280
  #---
255
281
 
256
282
  def info(message, options = {})
257
- config = Config.ensure(options)
283
+ config = Config.new(options).import({ :operation => :info })
258
284
 
259
285
  unless quiet?
260
286
  message = render_message(message, config)
@@ -266,7 +292,7 @@ class Base < Core
266
292
  #---
267
293
 
268
294
  def warn(message, options = {})
269
- config = Config.ensure(options)
295
+ config = Config.new(options).import({ :operation => :warn })
270
296
 
271
297
  unless quiet?
272
298
  message = render_message(message, config)
@@ -278,7 +304,7 @@ class Base < Core
278
304
  #---
279
305
 
280
306
  def error(message, options = {})
281
- config = Config.ensure(options)
307
+ config = Config.new(options).import({ :operation => :error })
282
308
 
283
309
  unless quiet?
284
310
  message = render_message(message, config)
@@ -290,7 +316,7 @@ class Base < Core
290
316
  #---
291
317
 
292
318
  def success(message, options = {})
293
- config = Config.ensure(options)
319
+ config = Config.new(options).import({ :operation => :success })
294
320
 
295
321
  unless quiet?
296
322
  message = render_message(message, config)
@@ -299,6 +325,13 @@ class Base < Core
299
325
  message
300
326
  end
301
327
 
328
+ #---
329
+
330
+ def prefixed_message(type, prefix, message, options = {})
331
+ return unless [ :info, :warn, :error, :success ].include?(type.to_sym)
332
+ send(type, prefix.to_s + render_message(message, Config.new(options).import({ :prefix => false, :operation => type.to_sym }).export), Config.new(options).import({ :i18n => false }).export)
333
+ end
334
+
302
335
  #-----------------------------------------------------------------------------
303
336
  # Utilities
304
337
 
@@ -45,7 +45,9 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
45
45
  def normalize(reload)
46
46
  super
47
47
 
48
- set_directory(Util::Disk.filename(get(:directory, Dir.pwd)))
48
+ directory = Util::Disk.filename(get(:directory, Dir.pwd))
49
+
50
+ set_directory(directory)
49
51
  register
50
52
 
51
53
  set_url(get(:url)) if get(:url, false)
@@ -70,6 +72,10 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
70
72
  unless reload
71
73
  @cache = Util::Cache.new(directory, Nucleon.sha1(plugin_name), '.project_cache')
72
74
  init_cache
75
+
76
+ unless self.class.load_provider(directory)
77
+ self.class.store_provider(directory, plugin_provider)
78
+ end
73
79
  end
74
80
  end
75
81
 
@@ -177,7 +183,7 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
177
183
  #---
178
184
 
179
185
  def set_url(url)
180
- if url && url = extension_set(:set_url, url.strip)
186
+ if url && url = extension_set(:set_url, url.strip)
181
187
  logger.info("Setting project #{name} url to #{url}")
182
188
 
183
189
  set(:url, url)
@@ -326,7 +332,7 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
326
332
  # Project operations
327
333
 
328
334
  def init_cache
329
- # Override in providers if needed
335
+ ignore(self.class.state_file)
330
336
  end
331
337
  protected :init_cache
332
338
 
@@ -806,11 +812,12 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
806
812
 
807
813
  def push(remote = :edit, options = {})
808
814
  config = Config.ensure(options).import({ :remote => remote })
815
+ no_pull = config.delete(:no_pull, false)
809
816
  success = false
810
817
 
811
818
  push_project = lambda do |push_remote|
812
819
  logger.info("Pushing to #{push_remote} from #{directory}")
813
- success = yield(config, push_remote) if block_given? && pull(push_remote, config)
820
+ success = yield(config, push_remote) if block_given? && ( no_pull || pull(push_remote, config) )
814
821
  end
815
822
 
816
823
  if can_persist?
@@ -870,7 +877,46 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
870
877
  end
871
878
  success
872
879
  end
873
-
880
+
881
+ #-----------------------------------------------------------------------------
882
+ # State configurations
883
+
884
+ def self.state_file
885
+ '.corl'
886
+ end
887
+
888
+ #---
889
+
890
+ @@project_data = {}
891
+
892
+ def self.store_provider(directory, provider)
893
+ if File.directory?(directory)
894
+ @@project_data[directory] = {
895
+ :provider => provider
896
+ }
897
+ json_data = Util::Data.to_json(@@project_data[directory], true)
898
+ Util::Disk.write(File.join(directory, state_file), json_data)
899
+ end
900
+ end
901
+
902
+ #---
903
+
904
+ def self.clear_provider(directory)
905
+ @@project_data.delete(directory)
906
+ end
907
+
908
+ #---
909
+
910
+ def self.load_provider(directory, override = nil)
911
+ @@project_data[directory] = {} unless @@project_data.has_key?(directory)
912
+
913
+ if override.nil? && @@project_data[directory].empty?
914
+ json_data = Util::Disk.read(File.join(directory, state_file))
915
+ @@project_data[directory] = hash(Util::Data.parse_json(json_data)) if json_data
916
+ end
917
+ override.nil? ? symbol_map(@@project_data[directory])[:provider] : override
918
+ end
919
+
874
920
  #-----------------------------------------------------------------------------
875
921
  # Utilities
876
922
 
@@ -893,9 +939,10 @@ class Project < Nucleon.plugin_class(:nucleon, :base)
893
939
 
894
940
  if options.has_key?(:url)
895
941
  if matches = translate_reference(options[:url])
896
- options[:provider] = matches[:provider]
897
- options[:url] = matches[:url]
898
- options[:revision] = matches[:revision] unless options.has_key?(:revision)
942
+ options[:provider] = matches[:provider]
943
+ options[:reference] = matches[:reference]
944
+ options[:url] = matches[:url]
945
+ options[:revision] = matches[:revision] unless options.has_key?(:revision)
899
946
 
900
947
  logger.debug("Translating project options: #{options.inspect}")
901
948
  end
@@ -23,26 +23,12 @@ class Add < Nucleon.plugin_class(:nucleon, :action)
23
23
  :add_failure,
24
24
  :push_failure
25
25
 
26
- register :path, :str, Dir.pwd
26
+ register_str :path, Dir.pwd
27
+ register_str :sub_path, nil
27
28
 
28
- register :sub_path, :str, nil
29
- register :sub_reference, :str, nil do |value|
30
- success = true
31
- if info = Nucleon.plugin_class(:nucleon, :project).translate_reference(value)
32
- if ! Nucleon.loaded_plugins(:nucleon, :project).keys.include?(info[:provider].to_sym)
33
- warn('nucleon.core.mixin.action.project.errors.project_reference', {
34
- :value => value,
35
- :provider => info[:provider],
36
- :reference => info[:reference],
37
- :url => info[:url],
38
- :revision => info[:revision]
39
- })
40
- success = false
41
- end
42
- end
43
- success
44
- end
45
- register :editable, :bool, false
29
+ register_project :sub_reference, nil
30
+
31
+ register_bool :editable
46
32
 
47
33
  project_config
48
34
  push_config
@@ -60,7 +46,7 @@ class Add < Nucleon.plugin_class(:nucleon, :action)
60
46
 
61
47
  def execute
62
48
  super do
63
- info('nucleon.action.project.add.start')
49
+ info('start')
64
50
 
65
51
  if project = project_load(settings[:path], false)
66
52
  sub_info = project.translate_reference(settings[:sub_reference], settings[:editable])
@@ -20,7 +20,7 @@ class Create < Nucleon.plugin_class(:nucleon, :action)
20
20
  super do
21
21
  codes :project_failure
22
22
 
23
- register :path, :str, Dir.pwd
23
+ register_str :path, Dir.pwd
24
24
  project_config
25
25
 
26
26
  config[:project_reference].default = ''
@@ -38,7 +38,7 @@ class Create < Nucleon.plugin_class(:nucleon, :action)
38
38
 
39
39
  def execute
40
40
  super do
41
- info('nucleon.action.project.create.start')
41
+ info('start')
42
42
 
43
43
  project = project_load(settings[:path], true, true)
44
44
  myself.status = code.project_failure unless project
@@ -23,8 +23,8 @@ class Remove < Nucleon.plugin_class(:nucleon, :action)
23
23
  :delete_failure,
24
24
  :push_failure
25
25
 
26
- register :path, :str, Dir.pwd
27
- register :sub_path, :str, nil
26
+ register_str :path, Dir.pwd
27
+ register_str :sub_path, nil
28
28
 
29
29
  project_config
30
30
  push_config
@@ -46,7 +46,7 @@ class Remove < Nucleon.plugin_class(:nucleon, :action)
46
46
 
47
47
  def execute
48
48
  super do
49
- info('nucleon.action.project.remove.start')
49
+ info('start')
50
50
 
51
51
  if project = project_load(settings[:path], false)
52
52
  if project.delete_subproject(settings[:sub_path])
@@ -24,8 +24,8 @@ class Save < Nucleon.plugin_class(:nucleon, :action)
24
24
  :commit_failure,
25
25
  :push_failure
26
26
 
27
- register :path, :str, Dir.pwd
28
- register :files, :array, '.'
27
+ register_str :path, Dir.pwd
28
+ register_files :files, '.'
29
29
 
30
30
  project_config
31
31
  commit_config(false)
@@ -44,7 +44,7 @@ class Save < Nucleon.plugin_class(:nucleon, :action)
44
44
 
45
45
  def execute
46
46
  super do
47
- info('nucleon.action.project.save.start')
47
+ info('start')
48
48
 
49
49
  if project = project_load(settings[:path], false, false)
50
50
  if commit(project, settings[:files])