nucleon 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -12,7 +12,7 @@ gem "sshkey", "~> 1.6"
12
12
  gem "childprocess", "~> 0.5.0"
13
13
  gem "celluloid", "~> 0.15"
14
14
 
15
- gem "grit", "~> 2.5"
15
+ gem "rugged", "~> 0.19"
16
16
  gem "octokit", "~> 2.7"
17
17
 
18
18
  group :development do
@@ -1,14 +1,16 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- addressable (2.3.5)
4
+ addressable (2.3.6)
5
+ atomic (1.1.16)
5
6
  builder (3.2.2)
6
7
  celluloid (0.15.2)
7
8
  timers (~> 1.1.0)
8
- childprocess (0.5.1)
9
+ childprocess (0.5.2)
9
10
  ffi (~> 1.0, >= 1.0.11)
10
11
  deep_merge (1.0.1)
11
- descendants_tracker (0.0.3)
12
+ descendants_tracker (0.0.4)
13
+ thread_safe (~> 0.3, >= 0.3.1)
12
14
  diff-lcs (1.2.5)
13
15
  faraday (0.9.0)
14
16
  multipart-post (>= 1.2, < 3)
@@ -22,10 +24,6 @@ GEM
22
24
  multi_json (>= 1.7.5, < 2.0)
23
25
  nokogiri (~> 1.6.0)
24
26
  oauth2
25
- grit (2.5.0)
26
- diff-lcs (~> 1.1)
27
- mime-types (~> 1.15)
28
- posix-spawn (~> 0.3.6)
29
27
  hashie (2.0.5)
30
28
  highline (1.6.21)
31
29
  i18n (0.6.9)
@@ -42,8 +40,7 @@ GEM
42
40
  jwt (0.1.11)
43
41
  multi_json (>= 1.5)
44
42
  log4r (1.1.10)
45
- mime-types (1.25.1)
46
- mini_portile (0.5.2)
43
+ mini_portile (0.5.3)
47
44
  multi_json (1.9.2)
48
45
  multi_xml (0.5.5)
49
46
  multipart-post (2.0.0)
@@ -58,9 +55,8 @@ GEM
58
55
  rack (~> 1.2)
59
56
  octokit (2.7.2)
60
57
  sawyer (~> 0.5.2)
61
- posix-spawn (0.3.8)
62
58
  rack (1.5.2)
63
- rake (10.1.1)
59
+ rake (10.2.2)
64
60
  rdoc (3.12.2)
65
61
  json (~> 1.4)
66
62
  rspec (2.14.1)
@@ -71,12 +67,15 @@ GEM
71
67
  rspec-expectations (2.14.5)
72
68
  diff-lcs (>= 1.1.3, < 2.0)
73
69
  rspec-mocks (2.14.6)
74
- sawyer (0.5.3)
70
+ rugged (0.19.0)
71
+ sawyer (0.5.4)
75
72
  addressable (~> 2.3.5)
76
73
  faraday (~> 0.8, < 0.10)
77
74
  sshkey (1.6.1)
75
+ thread_safe (0.3.1)
76
+ atomic (>= 1.1.7, < 2)
78
77
  timers (1.1.0)
79
- yard (0.8.7.3)
78
+ yard (0.8.7.4)
80
79
 
81
80
  PLATFORMS
82
81
  ruby
@@ -86,7 +85,6 @@ DEPENDENCIES
86
85
  celluloid (~> 0.15)
87
86
  childprocess (~> 0.5.0)
88
87
  deep_merge (~> 1.0)
89
- grit (~> 2.5)
90
88
  i18n (~> 0.6)
91
89
  jeweler (~> 2.0)
92
90
  log4r (~> 1.1)
@@ -95,5 +93,6 @@ DEPENDENCIES
95
93
  octokit (~> 2.7)
96
94
  rdoc (~> 3.12)
97
95
  rspec (~> 2.10)
96
+ rugged (~> 0.19)
98
97
  sshkey (~> 1.6)
99
98
  yard (~> 0.8)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.9
1
+ 0.1.10
@@ -332,7 +332,7 @@ module Facade
332
332
 
333
333
  result = Util::Shell.connection.exec(command, config, &code)
334
334
 
335
- unless result.status == Nucleon.code.success
335
+ unless config.get(:quiet, false) || result.status == Nucleon.code.success
336
336
  ui.error("Command #{command} failed to execute")
337
337
  end
338
338
  result
@@ -3,7 +3,6 @@ module Nucleon
3
3
  class Manager
4
4
 
5
5
  include Celluloid
6
- task_class TaskThread
7
6
 
8
7
  #-----------------------------------------------------------------------------
9
8
 
@@ -8,7 +8,7 @@ module Project
8
8
  # Settings
9
9
 
10
10
  def project_config
11
- project_plugins = CORL.loaded_plugins(:project)
11
+ project_plugins = Nucleon.loaded_plugins(:project)
12
12
 
13
13
  register :project_provider, :str, :git, 'nucleon.core.mixin.action.project.options.project_provider' do |value|
14
14
  value = value.to_sym
@@ -21,7 +21,7 @@ module Project
21
21
  end
22
22
  register :project_reference, :str, nil, 'nucleon.core.mixin.action.project.options.project_reference' do |value|
23
23
  success = true
24
- if info = CORL.plugin_class(:project).translate_reference(value)
24
+ if info = Nucleon.plugin_class(:project).translate_reference(value)
25
25
  if ! project_plugins.keys.include?(info[:provider].to_sym)
26
26
  warn('nucleon.core.mixin.action.project.errors.project_reference', {
27
27
  :value => value,
@@ -35,26 +35,27 @@ module Project
35
35
  end
36
36
  success
37
37
  end
38
- register :revision, :str, :master
38
+ register :project_revision, :str, :master, 'nucleon.core.mixin.action.project.options.project_revision'
39
39
  end
40
40
 
41
41
  #-----------------------------------------------------------------------------
42
42
  # Operations
43
43
 
44
- def project_load(root_dir, update = false)
44
+ def project_load(root_dir, create = false, update = false)
45
45
 
46
46
  # 1. Set a default project provider (reference can override)
47
47
  # 2. Get project from root directory
48
- # 3. Initialize project if not yet initialized
48
+ # 3. Initialize project if not yet initialized if requested
49
49
  # 4. Set remote if needed
50
50
  # 5. Checkout revision if needed
51
51
  # 6. Pull down updates if requested
52
52
 
53
53
  return Nucleon.project(extended_config(:project, {
54
+ :create => create,
54
55
  :provider => settings[:project_provider],
55
56
  :directory => root_dir,
56
- :url => settings[:reference],
57
- :revision => settings[:revision],
57
+ :url => settings[:project_reference],
58
+ :revision => settings[:project_revision],
58
59
  :pull => update
59
60
  }))
60
61
  end
@@ -337,7 +337,7 @@ class Action < Base
337
337
  begin
338
338
  if skip_validate || validate
339
339
  yield if block_given? && ( skip_hooks || extension_check(:exec_init) )
340
- myself.status = extension_set(:exec_exit) unless skip_hooks
340
+ myself.status = extension_set(:exec_exit, myself.status) unless skip_hooks
341
341
  else
342
342
  puts "\n" + I18n.t('corl.core.exec.help.usage') + ': ' + help + "\n" unless quiet?
343
343
  myself.status = code.validation_failed
@@ -550,14 +550,16 @@ class Project < Base
550
550
 
551
551
  #---
552
552
 
553
- def update_subprojects
553
+ def update_subprojects(options = {})
554
554
  if can_persist?
555
555
  localize do
556
+ config = Config.ensure(options)
557
+
556
558
  if extension_check(:update_projects)
557
559
  logger.info("Updating sub projects in project #{name}")
558
560
 
559
561
  success = false
560
- success = yield if block_given?
562
+ success = yield(config) if block_given?
561
563
 
562
564
  if success
563
565
  extension(:update_projects_success)
@@ -723,11 +725,12 @@ class Project < Base
723
725
 
724
726
  if extension_check(:pull, { :directory => directory, :config => config })
725
727
  remote = config.delete(:remote)
726
-
727
- logger.info("Pulling from #{remote} into #{directory}")
728
-
729
- success = yield(config, remote) if block_given?
730
-
728
+
729
+ if remote(remote)
730
+ logger.info("Pulling from #{remote} into #{directory}")
731
+ success = yield(config, remote) if block_given?
732
+ end
733
+
731
734
  if success
732
735
  load_revision
733
736
  update_subprojects
@@ -763,20 +766,40 @@ class Project < Base
763
766
  if extension_check(:push, { :directory => directory, :config => config })
764
767
  remote = config.delete(:remote)
765
768
 
766
- logger.info("Pushing to #{remote} from #{directory}")
767
-
768
- success = yield(config, remote) if block_given?
769
-
769
+ if remote(remote)
770
+ logger.info("Pushing to #{remote} from #{directory}")
771
+ success = yield(config, remote) if block_given? && pull(remote, options)
772
+ end
773
+
770
774
  if success
771
775
  config.delete(:revision)
772
776
 
773
777
  extension(:push_success, { :directory => directory, :remote => remote, :config => config })
774
778
 
775
779
  if config.get(:propogate, true)
776
- logger.debug("Pushing sub projects as propogate option was given")
780
+ unless parent.nil?
781
+ propogate_up = config.get(:propogate_up, nil)
782
+
783
+ if propogate_up.nil? || propogate_up
784
+ logger.debug("Commit to parent as parent exists and propogate option was given")
785
+ parent.push(remote, Config.new(config.export.dup).import({
786
+ :propogate_up => true,
787
+ :propogate_down => false
788
+ }))
789
+ end
790
+ end
791
+
792
+ logger.debug("Pushing sub projects")
793
+
794
+ propogate_down = config.get(:propogate_down, nil)
777
795
 
778
- each do |path, project|
779
- project.push(remote, config)
796
+ if propogate_down.nil? || propogate_down
797
+ each do |path, project|
798
+ project.push(remote, Config.new(config.export.dup).import({
799
+ :propogate_up => false,
800
+ :propogate_down => true
801
+ }))
802
+ end
780
803
  end
781
804
  end
782
805
  end
@@ -883,9 +906,11 @@ class Project < Base
883
906
 
884
907
  #---
885
908
 
886
- def localize
909
+ def localize(path = nil)
887
910
  prev_directory = Dir.pwd
888
- Dir.chdir(directory)
911
+ path = directory if path.nil?
912
+
913
+ Dir.chdir(path)
889
914
 
890
915
  result = safe_exec(true) do
891
916
  yield
@@ -1,42 +1,47 @@
1
1
 
2
2
  module Nucleon
3
3
  module Util
4
- class Git < ::Grit::Repo
4
+ class Git
5
5
 
6
6
  #-----------------------------------------------------------------------------
7
- # Constructor / Destructor
8
-
9
- def initialize(path, options = {})
7
+ # Git repo loader
8
+
9
+ def self.load(path, options = {})
10
10
  epath = File.expand_path(path)
11
11
  git_dir = File.join(epath, '.git')
12
+ git = nil
12
13
 
13
- @bare = (options[:is_bare] ? true : false)
14
-
15
- Grit.debug = true if Nucleon.log_level == :debug
16
-
17
- if File.exist?(git_dir)
18
- self.working_dir = epath
19
-
20
- if File.directory?(git_dir)
21
- self.path = git_dir
22
- else
23
- git_dir = Util::Disk.read(git_dir)
24
- unless git_dir.nil?
25
- git_dir = git_dir.gsub(/^gitdir\:\s*/, '').strip
26
- self.path = git_dir if File.directory?(git_dir)
27
- end
14
+ begin
15
+ if File.exist?(git_dir)
16
+ if File.directory?(git_dir)
17
+ git = Rugged::Repository.new(git_dir)
18
+ else
19
+ # TODO: Find out if this is actually necessary with Rugged / LibGit2
20
+ git_dir = Util::Disk.read(git_dir)
21
+ unless git_dir.nil?
22
+ git_dir = git_dir.gsub(/^gitdir\:\s*/, '').strip
23
+
24
+ if File.directory?(git_dir)
25
+ git = Rugged::Repository.new(git_dir)
26
+ git.workdir = epath
27
+ end
28
+ end
29
+ end
30
+ elsif File.directory?(epath) && (options[:bare] || (epath =~ /\.git$/ && File.exist?(File.join(epath, 'HEAD'))))
31
+ git = Rugged::Repository.bare(epath)
28
32
  end
29
-
30
- elsif File.directory?(epath) && (options[:is_bare] || (epath =~ /\.git$/ && File.exist?(File.join(epath, 'HEAD'))))
31
- self.path = epath
32
- @bare = true
33
-
34
- else
35
- self.path = git_dir
33
+ rescue
36
34
  end
37
35
 
38
- self.git = ::Grit::Git.new(self.path)
39
- self.git.work_tree = epath
36
+ if git.nil? && options[:create]
37
+ FileUtils.mkdir_p(epath) unless File.directory?(epath)
38
+ if options[:bare]
39
+ git = Rugged::Repository.init_at(epath, :bare)
40
+ else
41
+ git = Rugged::Repository.init_at(epath)
42
+ end
43
+ end
44
+ git
40
45
  end
41
46
  end
42
47
  end
@@ -14,8 +14,26 @@ class Add < Nucleon.plugin_class(:action)
14
14
  codes :project_failure,
15
15
  :add_failure,
16
16
  :push_failure
17
-
17
+
18
+ register :path, :str, Dir.pwd
19
+
18
20
  register :sub_path, :str, nil
21
+ register :sub_reference, :str, nil do |value|
22
+ success = true
23
+ if info = Nucleon.plugin_class(:project).translate_reference(value)
24
+ if ! Nucleon.loaded_plugins(:project).keys.include?(info[:provider].to_sym)
25
+ warn('nucleon.core.mixin.action.project.errors.project_reference', {
26
+ :value => value,
27
+ :provider => info[:provider],
28
+ :reference => info[:reference],
29
+ :url => info[:url],
30
+ :revision => info[:revision]
31
+ })
32
+ success = false
33
+ end
34
+ end
35
+ success
36
+ end
19
37
  register :editable, :bool, false
20
38
 
21
39
  project_config
@@ -26,7 +44,7 @@ class Add < Nucleon.plugin_class(:action)
26
44
  #---
27
45
 
28
46
  def arguments
29
- [ :sub_path, :project_reference ]
47
+ [ :sub_path, :sub_reference ]
30
48
  end
31
49
 
32
50
  #-----------------------------------------------------------------------------
@@ -36,15 +54,15 @@ class Add < Nucleon.plugin_class(:action)
36
54
  super do
37
55
  info('nucleon.actions.add.start')
38
56
 
39
- if project = project_load(Dir.pwd, false)
40
- sub_info = project.translate_reference(settings[:project_reference], settings[:editable])
57
+ if project = project_load(settings[:path], false)
58
+ sub_info = project.translate_reference(settings[:sub_reference], settings[:editable])
41
59
  sub_path = settings[:sub_path]
42
60
 
43
61
  if sub_info
44
62
  sub_url = sub_info[:url]
45
63
  sub_revision = sub_info[:revision]
46
64
  else
47
- sub_url = settings[:project_reference]
65
+ sub_url = settings[:sub_reference]
48
66
  sub_revision = nil
49
67
  end
50
68
 
@@ -12,9 +12,10 @@ class Create < Nucleon.plugin_class(:action)
12
12
  super do
13
13
  codes :project_failure
14
14
 
15
- register :path, :str, Dir.pwd
16
-
15
+ register :path, :str, Dir.pwd
17
16
  project_config
17
+
18
+ config[:project_reference].default = ''
18
19
  end
19
20
  end
20
21
 
@@ -28,17 +29,10 @@ class Create < Nucleon.plugin_class(:action)
28
29
  # Operations
29
30
 
30
31
  def execute
31
- super do |node, network|
32
+ super do
32
33
  info('nucleon.actions.create.start')
33
34
 
34
- project = Nucleon.project(extended_config(:project, {
35
- :create => true,
36
- :directory => settings[:path],
37
- :url => settings[:project_reference],
38
- :revision => settings[:revision],
39
- :pull => true
40
- }), settings[:project_provider])
41
-
35
+ project = project_load(settings[:path], true, true)
42
36
  myself.status = code.project_failure unless project
43
37
  end
44
38
  end
@@ -38,7 +38,7 @@ class Extract < Nucleon.plugin_class(:action)
38
38
  # Operations
39
39
 
40
40
  def execute
41
- super do |node, network|
41
+ super do
42
42
  unless @package.extract(settings[:path])
43
43
  myself.status = code.extract_failure
44
44
  end
@@ -14,7 +14,8 @@ class Remove < Nucleon.plugin_class(:action)
14
14
  codes :project_failure,
15
15
  :delete_failure,
16
16
  :push_failure
17
-
17
+
18
+ register :path, :str, Dir.pwd
18
19
  register :sub_path, :str, nil
19
20
 
20
21
  project_config
@@ -36,10 +37,10 @@ class Remove < Nucleon.plugin_class(:action)
36
37
  # Operations
37
38
 
38
39
  def execute
39
- super do |node, network|
40
+ super do
40
41
  info('nucleon.actions.remove.start')
41
42
 
42
- if project = project_load(Dir.pwd, false)
43
+ if project = project_load(settings[:path], false)
43
44
  if project.delete_subproject(settings[:sub_path])
44
45
  myself.status = code.push_failure unless push(project)
45
46
  else