metacon 0.1.0 → 0.1.3

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.
File without changes
data/Rakefile CHANGED
@@ -25,7 +25,7 @@ Jeweler::Tasks.new do |gem|
25
25
  gem.requirements << 'rvm, v1.8.2 or greater'
26
26
  gem.requirements << 'pythonbrew, v1.1 or greater'
27
27
 
28
- gem.post_install_message = "\n\n\e[1;32m\e[40m--- Please run \e[1;37mmetacon-install\e[1;32m to check dependencies & finish the installation --- \e[0m\n\n"
28
+ gem.post_install_message = "\n\n\e[1;32m\e[40m--- You may need to run \e[1;37mmetacon-installer\e[1;32m to check dependencies & finish the installation --- \e[0m\n\n"
29
29
  # dependencies defined in Gemfile
30
30
  end
31
31
  Jeweler::RubygemsDotOrgTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.3
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ libdir = File.join(File.dirname(__FILE__), '..', 'lib')
4
+ if File.exists?(File.join(libdir,'metacon.rb'))
5
+ $LOAD_PATH.unshift(libdir)
6
+ end
7
+ require 'metacon'
8
+
9
+ MetaCon::Command.run
@@ -1,9 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
- require 'rubygems'
3
- libdir = File.join(File.dirname(__FILE__), '..', 'lib')
4
- if File.exists?(File.join(libdir,'metacon.rb'))
5
- $LOAD_PATH.unshift(libdir)
6
- end
7
- require 'metacon'
2
+ # Essentially just a wrapper around .metacon_unwrapped that makes sure it uses
3
+ # the correct ruby version + gemset.
8
4
 
9
- MetaCon::Command.run
5
+ rvm_path = File.expand_path("~/.rvm/scripts/rvm")
6
+ if File.exists?(rvm_path)
7
+ require 'shellwords'
8
+ cmd = Shellwords.shellescape(File.join(File.dirname(__FILE__), '.metacon_unwrapped'))
9
+ full_cmd = '. "$HOME/.rvm/scripts/rvm" && rvm ruby-1.9.2@metacon exec ' + cmd + ' ' + ARGV.map{|a| Shellwords.shellescape(a)}.join(' ')
10
+ exec full_cmd
11
+ else
12
+ $stderr.puts "RVM is required to run metacon. To finish installation of metacon please run metacon-installer"
13
+ end
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ cmd = File.join(File.dirname(__FILE__), '..', 'shelp', 'metacon-installer.sh')
4
+ exec cmd
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.3
@@ -1,3 +1,7 @@
1
+
2
+ # TODO:
3
+ # - "up" / "refresh" - something to redo dependencies etc. etc. as if context
4
+ # had just changed.
1
5
  module MetaCon
2
6
  class Command
3
7
  require 'optparse'
@@ -28,7 +28,7 @@ module MetaCon
28
28
 
29
29
  init_role = mcp.list(:role)[0] || 'main'
30
30
  init_rtc = mcp.list(:rtc)[0] || 'dev'
31
- switch_res = mcp.switch(:role => init_role, :rtc => init_rtc)
31
+ switch_res = mcp.switch(true, {:role => init_role, :rtc => init_rtc})
32
32
  if switch_res == :impossible
33
33
  $cli.cfail 'Cannot initialize the metacontext- submodules need to have files committed.'
34
34
  exit 4
@@ -0,0 +1,42 @@
1
+ module MetaCon
2
+ module Loaders
3
+ module Helpers
4
+ def included(by); by.extend(self) end
5
+ def cmd(cmd_string, echo=true)
6
+ require 'open3'
7
+ main_out = ''
8
+ err_out = ''
9
+ exit_status = 1
10
+ Open3.popen3('/usr/bin/env bash -s') do |stdin, stdout, stderr, wth|
11
+ stdin.puts cmd_string
12
+ stdin.flush
13
+ stdin.close
14
+ loop do
15
+ ready, _, exc = IO.select [stdout, stderr], [], [stdout, stderr], 5000
16
+ ready.map!{|str| str.fileno}
17
+ if (!stdout.eof?) && ready.include?(stdout.fileno)
18
+ more = stdout.readpartial(4096)
19
+ if echo
20
+ $stdout.print more
21
+ $stdout.flush
22
+ end
23
+ main_out += more
24
+ elsif (!stderr.eof?) && ready.include?(stderr.fileno)
25
+ more = stderr.readpartial(4096)
26
+ if echo
27
+ $stderr.print more
28
+ $stderr.flush
29
+ end
30
+ err_out += more
31
+ else break end
32
+ break if (stderr.eof? && stdout.eof?)
33
+ end
34
+ if wth.nil? then exit_status = err_out.length > 0 ? 1 : 0 # Best guess
35
+ else exit_status = wth.value.to_i end
36
+ end
37
+ return [main_out, err_out, exit_status]
38
+ end
39
+ extend self
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,29 @@
1
+
2
+ # TODO:
3
+ # - rvm:ruby
4
+ # - rvm:gem
5
+ # - pythonbrew:python
6
+ # - pythonbrew:pip
7
+ # ----
8
+ # - gitsubmodules:sub
9
+ # ----
10
+ # - bundler
11
+ # - general-tools (apt/homebrew/etc.)
12
+ #
13
+
14
+ module MetaCon
15
+ module Loaders
16
+ module Index
17
+ require 'metacon/loaders/rvm'
18
+ #require 'metacon/loaders/python_brew'
19
+ #require 'metacon/loaders/general_git_submodules'
20
+ LOADERS = {
21
+ 'ruby' => MetaCon::Loaders::RVM,
22
+ 'gem' => MetaCon::Loaders::RVM
23
+ #:python => MetaCon::Loaders::PythonBrew,
24
+ #:pip => MetaCon::Loaders::PythonBrew,
25
+ #:sub => MetaCon::Loaders::GeneralGitSubmodules
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ module MetaCon
2
+ module Loaders
3
+ class RVM
4
+ include MetaCon::Loaders::Helpers
5
+ include MetaCon::CLIHelpers
6
+ def self.ensure(dep, state, proj, v=true)
7
+ kind = dep.shift
8
+ if kind == 'ruby'
9
+ vstr = dep[0].downcase=='head' ? 'ruby-head' : dep.join('-')
10
+ switch_ruby(vstr)
11
+ elsif kind == 'gem'
12
+
13
+ else
14
+ raise "I don't handle #{kind} dependencies... am I missing something?"
15
+ end
16
+ end
17
+
18
+ def self.switch_ruby(version, v=true)
19
+ # TODO: Be sure and always select a gemset
20
+ # TODO: Make sure metacon is always installed in that gemset
21
+ select_res, err_txt, st = cmd "rvm use '#{version}'", v
22
+ select_res += err_txt
23
+ if st == 0 && select_res =~ /rvm install (.*)/
24
+ real_version = $1
25
+ if install_ruby(real_version,v) then return switch_ruby(real_version)
26
+ else return(false) end
27
+ elsif select_res =~ /Using/i then return true
28
+ else return(false) end
29
+ end
30
+
31
+ def self.install_ruby(version, v=true)
32
+ inst_res, err_txt, st = cmd "rvm install '#{version}'", v
33
+ return st == 0 && err_text.strip.length == 0
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,11 +1,22 @@
1
1
  module MetaCon
2
2
  class Project
3
3
  require 'metacon/config'
4
+ require 'metacon/loaders/index'
5
+ include MetaCon::Loaders::Index
4
6
  attr_accessor :mc_dir, :rel_dir, :root_dir, :valid
5
7
  def self.initialized?(relative_to='./')
6
8
  ! find_mc_dir(relative_to).nil?
7
9
  end
8
10
 
11
+ def uid
12
+ if @uid.nil?
13
+ require 'digest/sha1'
14
+ key = self.this_host + @state[:role] + @state[:rtc] + @state[:host] + @state[:os]
15
+ @uid = Digest::SHA1.hexdigest(key)[0..5]
16
+ end
17
+ @uid
18
+ end
19
+
9
20
  def initialize(relative_to='./')
10
21
  @rel_dir = File.expand_path(relative_to)
11
22
  @mc_dir = Project.find_mc_dir(@rel_dir)
@@ -17,33 +28,24 @@ module MetaCon
17
28
  @root_dir = File.expand_path(File.join(@mc_dir, '..'))
18
29
  @valid = true
19
30
  @state = SavedState.new(@mc_dir)
31
+ refresh_conf
20
32
  end
21
33
  end
22
34
 
23
- def conf_obj
24
- refresh_conf if @config.nil?
25
- @config
26
- end
27
-
28
- def conf
29
- refresh_conf if @config.nil?
30
- @config[current_state]
31
- end
32
-
33
- def this_os; `uname -s`.strip.downcase end
34
- def this_host; `uname -n`.strip end
35
-
36
- def different_os?
35
+ def conf_obj; @config end
36
+ def conf; @config[current_state] end
37
37
 
38
+ def this_os
39
+ @@this_os ||= `uname -s`.strip.downcase
40
+ @@this_os
38
41
  end
39
42
 
40
- def atomic(&block)
41
- @state.atomic do |s|
42
- yield self, s
43
- end
43
+ def this_host
44
+ @this_host ||= `uname -n`.strip
45
+ @this_host
44
46
  end
45
47
 
46
- def switch(changes={})
48
+ def switch(verbose=false,changes={})
47
49
  return :nochange if changes=={}
48
50
  return :impossible unless can_switch?
49
51
  changed = false
@@ -54,7 +56,7 @@ module MetaCon
54
56
  changed = s.dirty
55
57
  end
56
58
  if changed
57
- return setup_context
59
+ return setup_context(verbose)
58
60
  else
59
61
  return :nochange
60
62
  end
@@ -74,7 +76,6 @@ module MetaCon
74
76
 
75
77
  def list(to_list)
76
78
  return nil unless @valid
77
- refresh_conf
78
79
  cs = current_state
79
80
  @config.declared[to_list].keys | [cs[to_list]]
80
81
  end
@@ -92,28 +93,33 @@ module MetaCon
92
93
 
93
94
  def refresh_conf; @config = Config.new(@root_dir) end
94
95
 
95
- def setup_context
96
- # Dependencies loaded in for:
97
- # - ruby
98
- # - gems
99
- # - bundler Gemfiles
100
- # - python
101
- # - pips
102
- # - submodules
103
- # - (general tools)
104
- # Use different classes for each to encourage adding more
105
-
106
- return :switched
96
+ def setup_context(verbose=false)
97
+ dependencies = self.conf['dependencies']
98
+ incomplete = false
99
+ dependencies.each do |dep|
100
+ dep = dep.split('/').map{|part| part.strip}
101
+ kind = dep[0].downcase
102
+ loader = LOADERS[kind]
103
+ if loader.nil?
104
+ $stderr.puts "WARNING: Don't know how to work with '#{kind}' dependencies." if verbose
105
+ incomplete = true
106
+ else
107
+ loader.ensure(dep, @state.state, self)
108
+ end
109
+ end
110
+ return incomplete ? :incomplete : :switched
111
+ # TODO: Handle :incomplete in calling modules
107
112
  end
108
113
  end
109
114
 
110
115
  class SavedState
111
116
  require 'yaml'
112
- attr_accessor :dirty
117
+ attr_accessor :dirty, :state
113
118
  def initialize(mcdir)
114
119
  raise "#{mcdir} not found" unless File.directory?(mcdir)
115
120
  @fstate = File.join(mcdir,'current_state')
116
121
  @in_atomic = @dirty = false
122
+ @state = nil
117
123
  end
118
124
 
119
125
  def blank_initial_state
@@ -143,14 +149,22 @@ module MetaCon
143
149
  end
144
150
 
145
151
  def readonly
146
- res = YAML::load_file(@fstate)
147
- res ||= blank_initial_state
152
+ if File.exists?(@fstate)
153
+ res = YAML::load_file(@fstate)
154
+ res ||= blank_initial_state
155
+ else
156
+ res = blank_initial_state
157
+ end
148
158
  return res
149
159
  end
150
160
 
151
161
  def [](key)
152
162
  if @in_atomic
153
163
  @state[key]
164
+ elsif @state.nil?
165
+ @state = readonly
166
+ else
167
+ @state[key]
154
168
  end
155
169
  end
156
170
 
@@ -158,6 +172,10 @@ module MetaCon
158
172
  if @in_atomic
159
173
  @state[key] = val
160
174
  @dirty = true
175
+ else
176
+ atomic do |s|
177
+ s[key] = val
178
+ end
161
179
  end
162
180
  end
163
181
  end
@@ -12,7 +12,7 @@ module MetaCon
12
12
  end
13
13
  end
14
14
  else
15
- res = $proj.switch({cmd=>opts[0]})
15
+ res = $proj.switch(true, {cmd=>opts[0]})
16
16
  case res
17
17
  when :nochange
18
18
  $cli.cwarn 'Nothing changed'
@@ -4,20 +4,21 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{metacon}
8
- s.version = "0.1.0"
7
+ s.name = "metacon"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joseph Wecker"]
12
- s.date = %q{2011-10-18}
13
- s.description = %q{Tool with some similarities to puppet but specializing in fast development iteration and continuous deployment. Specifically initially for use with justin.tv / twitch.tv project clusters.}
14
- s.email = %q{jwecker@justin.tv}
15
- s.executables = ["metacon-install", "metacon"]
12
+ s.date = "2011-10-20"
13
+ s.description = "Tool with some similarities to puppet but specializing in fast development iteration and continuous deployment. Specifically initially for use with justin.tv / twitch.tv project clusters."
14
+ s.email = "jwecker@justin.tv"
15
+ s.executables = [".metacon_unwrapped", "metacon", "metacon-installer"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE.txt",
18
18
  "README.rdoc"
19
19
  ]
20
20
  s.files = [
21
+ ".attic/metacon-install",
21
22
  ".attic/old/.cmd_common",
22
23
  ".attic/old/Gemfile",
23
24
  ".attic/old/Gemfile.lock",
@@ -40,14 +41,18 @@ Gem::Specification.new do |s|
40
41
  "Rakefile",
41
42
  "TODO.md",
42
43
  "VERSION",
44
+ "bin/.metacon_unwrapped",
43
45
  "bin/metacon",
44
- "bin/metacon-install",
46
+ "bin/metacon-installer",
45
47
  "lib/VERSION",
46
48
  "lib/metacon.rb",
47
49
  "lib/metacon/cli_helpers.rb",
48
50
  "lib/metacon/command.rb",
49
51
  "lib/metacon/config.rb",
50
52
  "lib/metacon/init.rb",
53
+ "lib/metacon/loaders/helpers.rb",
54
+ "lib/metacon/loaders/index.rb",
55
+ "lib/metacon/loaders/rvm.rb",
51
56
  "lib/metacon/project.rb",
52
57
  "lib/metacon/self_install.rb",
53
58
  "lib/metacon/stat.rb",
@@ -55,21 +60,18 @@ Gem::Specification.new do |s|
55
60
  "metacon.gemspec",
56
61
  "notes-dependency-tool.md",
57
62
  "notes.rdoc",
63
+ "shelp/metacon-installer.sh",
58
64
  "shelp/metacon.bashrc",
59
65
  "test/helper.rb",
60
66
  "test/test_metacon.rb"
61
67
  ]
62
- s.homepage = %q{http://github.com/josephwecker/metacon}
68
+ s.homepage = "http://github.com/josephwecker/metacon"
63
69
  s.licenses = ["MIT"]
64
- s.post_install_message = %q{
65
-
66
- --- Please run metacon-install to check dependencies & finish the installation --- 
67
-
68
- }
70
+ s.post_install_message = "\n\n\e[1;32m\e[40m--- You may need to run \e[1;37mmetacon-installer\e[1;32m to check dependencies & finish the installation --- \e[0m\n\n"
69
71
  s.require_paths = ["lib"]
70
72
  s.requirements = ["git, v1.7.4.1 or greater", "rvm, v1.8.2 or greater", "pythonbrew, v1.1 or greater"]
71
- s.rubygems_version = %q{1.6.2}
72
- s.summary = %q{Metacontroller for organizing aggregate projects}
73
+ s.rubygems_version = "1.8.10"
74
+ s.summary = "Metacontroller for organizing aggregate projects"
73
75
 
74
76
  if s.respond_to? :specification_version then
75
77
  s.specification_version = 3
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # TODO:
4
+ # - install the metacon gem (in metacon's ruby+gemset)
5
+ # - look at output to installation - find full path for .metacon_unwrapped
6
+ # - make a 'metacon' bin or symlink one that wraps .metacon_unwrapped w/ rvm exec
7
+
8
+
9
+ set -e
10
+
11
+ MCON_RUBY_V="ruby-1.9.2"
12
+
13
+ if [[ $EUID == 0 ]]; then
14
+ echo "You are running this as a superuser. I recommend against that if possible." 1>&2
15
+ read -p "Continue anyway (y/n)? "
16
+ [ "$REPLY" == "y" ] || exit 1
17
+ fi
18
+
19
+ [[ `git --version` ]] || ( echo "Metacon requires 'git' (git-core package if deb/ubu). Please install and retry." && exit 1 )
20
+ [[ `curl --version` ]] || ( echo "Metaon requires 'curl'. Please install and retry." && exit 1 )
21
+
22
+ if [[ ! `rvm version` ]]; then
23
+ echo "RVM not found. Attempting to install."
24
+ bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) || exit 2
25
+ INSTALLED_RVM=1
26
+ else
27
+ echo "RVM found"
28
+ INSTALLED_RVM=
29
+ fi
30
+
31
+ source "$HOME/.rvm/scripts/rvm"
32
+ set +e
33
+ rvm use $MCON_RUBY_V || ( rvm install $MCON_RUBY_V && rvm use $MCON_RUBY_V ) || exit 3
34
+ echo `rvm current`
35
+ rvm gemset use metacon || ( rvm gemset create metacon && rvm gemset use metacon ) || exit 3
36
+ rvm --force gemset empty metacon || exit 3
37
+ echo `rvm current`
38
+
39
+ set -e
40
+ GEMOUT=`mktemp /tmp/metacon.XXXXXX`
41
+ gem install metacon | tee $GEMOUT
42
+ DIRNAME=`grep 'Successfully installed metacon-' $GEMOUT | cut -d' ' -f3`
43
+ unlink $GEMOUT
44
+
45
+ rm -f /usr/local/bin/metacon /usr/local/bin/.metacon_unwrapped
46
+ ln -s `rvm gemdir`/gems/${DIRNAME}/bin/metacon /usr/local/bin/metacon
47
+
48
+ if [ $INSTALLED_RVM ]; then
49
+ echo "To finish installing RVM you need to add the following to your .bashrc (or .bash_profile etc.) - then restart the shell."
50
+ echo "echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile"
51
+ fi
metadata CHANGED
@@ -1,142 +1,107 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: metacon
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Joseph Wecker
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-10-18 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- type: :runtime
23
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2011-10-20 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: god
16
+ requirement: &2159098240 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 51
29
- segments:
30
- - 0
31
- - 11
32
- - 0
20
+ - !ruby/object:Gem::Version
33
21
  version: 0.11.0
34
- name: god
35
- version_requirements: *id001
36
- prerelease: false
37
- - !ruby/object:Gem::Dependency
38
22
  type: :runtime
39
- requirement: &id002 !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ version_requirements: *2159098240
25
+ - !ruby/object:Gem::Dependency
26
+ name: highline
27
+ requirement: &2159097760 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
29
+ requirements:
42
30
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 11
45
- segments:
46
- - 1
47
- - 6
48
- - 2
31
+ - !ruby/object:Gem::Version
49
32
  version: 1.6.2
50
- name: highline
51
- version_requirements: *id002
33
+ type: :runtime
52
34
  prerelease: false
53
- - !ruby/object:Gem::Dependency
54
- type: :development
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 0
63
- version: "0"
35
+ version_requirements: *2159097760
36
+ - !ruby/object:Gem::Dependency
64
37
  name: minitest
65
- version_requirements: *id003
66
- prerelease: false
67
- - !ruby/object:Gem::Dependency
38
+ requirement: &2159097280 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
68
44
  type: :development
69
- requirement: &id004 !ruby/object:Gem::Requirement
45
+ prerelease: false
46
+ version_requirements: *2159097280
47
+ - !ruby/object:Gem::Dependency
48
+ name: yard
49
+ requirement: &2159096800 !ruby/object:Gem::Requirement
70
50
  none: false
71
- requirements:
51
+ requirements:
72
52
  - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 7
75
- segments:
76
- - 0
77
- - 6
78
- - 0
53
+ - !ruby/object:Gem::Version
79
54
  version: 0.6.0
80
- name: yard
81
- version_requirements: *id004
82
- prerelease: false
83
- - !ruby/object:Gem::Dependency
84
55
  type: :development
85
- requirement: &id005 !ruby/object:Gem::Requirement
56
+ prerelease: false
57
+ version_requirements: *2159096800
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: &2159096320 !ruby/object:Gem::Requirement
86
61
  none: false
87
- requirements:
62
+ requirements:
88
63
  - - ~>
89
- - !ruby/object:Gem::Version
90
- hash: 23
91
- segments:
92
- - 1
93
- - 0
94
- - 0
64
+ - !ruby/object:Gem::Version
95
65
  version: 1.0.0
96
- name: bundler
97
- version_requirements: *id005
98
- prerelease: false
99
- - !ruby/object:Gem::Dependency
100
66
  type: :development
101
- requirement: &id006 !ruby/object:Gem::Requirement
67
+ prerelease: false
68
+ version_requirements: *2159096320
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: &2159095840 !ruby/object:Gem::Requirement
102
72
  none: false
103
- requirements:
73
+ requirements:
104
74
  - - ~>
105
- - !ruby/object:Gem::Version
106
- hash: 7
107
- segments:
108
- - 1
109
- - 6
110
- - 4
75
+ - !ruby/object:Gem::Version
111
76
  version: 1.6.4
112
- name: jeweler
113
- version_requirements: *id006
114
- prerelease: false
115
- - !ruby/object:Gem::Dependency
116
77
  type: :development
117
- requirement: &id007 !ruby/object:Gem::Requirement
118
- none: false
119
- requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- hash: 3
123
- segments:
124
- - 0
125
- version: "0"
78
+ prerelease: false
79
+ version_requirements: *2159095840
80
+ - !ruby/object:Gem::Dependency
126
81
  name: rcov
127
- version_requirements: *id007
82
+ requirement: &2159095360 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
128
89
  prerelease: false
129
- description: Tool with some similarities to puppet but specializing in fast development iteration and continuous deployment. Specifically initially for use with justin.tv / twitch.tv project clusters.
90
+ version_requirements: *2159095360
91
+ description: Tool with some similarities to puppet but specializing in fast development
92
+ iteration and continuous deployment. Specifically initially for use with justin.tv
93
+ / twitch.tv project clusters.
130
94
  email: jwecker@justin.tv
131
- executables:
132
- - metacon-install
95
+ executables:
96
+ - .metacon_unwrapped
133
97
  - metacon
98
+ - metacon-installer
134
99
  extensions: []
135
-
136
- extra_rdoc_files:
100
+ extra_rdoc_files:
137
101
  - LICENSE.txt
138
102
  - README.rdoc
139
- files:
103
+ files:
104
+ - .attic/metacon-install
140
105
  - .attic/old/.cmd_common
141
106
  - .attic/old/Gemfile
142
107
  - .attic/old/Gemfile.lock
@@ -159,14 +124,18 @@ files:
159
124
  - Rakefile
160
125
  - TODO.md
161
126
  - VERSION
127
+ - bin/.metacon_unwrapped
162
128
  - bin/metacon
163
- - bin/metacon-install
129
+ - bin/metacon-installer
164
130
  - lib/VERSION
165
131
  - lib/metacon.rb
166
132
  - lib/metacon/cli_helpers.rb
167
133
  - lib/metacon/command.rb
168
134
  - lib/metacon/config.rb
169
135
  - lib/metacon/init.rb
136
+ - lib/metacon/loaders/helpers.rb
137
+ - lib/metacon/loaders/index.rb
138
+ - lib/metacon/loaders/rvm.rb
170
139
  - lib/metacon/project.rb
171
140
  - lib/metacon/self_install.rb
172
141
  - lib/metacon/stat.rb
@@ -174,45 +143,40 @@ files:
174
143
  - metacon.gemspec
175
144
  - notes-dependency-tool.md
176
145
  - notes.rdoc
146
+ - shelp/metacon-installer.sh
177
147
  - shelp/metacon.bashrc
178
148
  - test/helper.rb
179
149
  - test/test_metacon.rb
180
- has_rdoc: true
181
150
  homepage: http://github.com/josephwecker/metacon
182
- licenses:
151
+ licenses:
183
152
  - MIT
184
- post_install_message: "\n\n\
185
- \e[1;32m\e[40m--- Please run \e[1;37mmetacon-install\e[1;32m to check dependencies & finish the installation --- \e[0m\n\n"
153
+ post_install_message: ! "\n\n\e[1;32m\e[40m--- You may need to run \e[1;37mmetacon-installer\e[1;32m
154
+ to check dependencies & finish the installation --- \e[0m\n\n"
186
155
  rdoc_options: []
187
-
188
- require_paths:
156
+ require_paths:
189
157
  - lib
190
- required_ruby_version: !ruby/object:Gem::Requirement
158
+ required_ruby_version: !ruby/object:Gem::Requirement
191
159
  none: false
192
- requirements:
193
- - - ">="
194
- - !ruby/object:Gem::Version
195
- hash: 3
196
- segments:
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ segments:
197
165
  - 0
198
- version: "0"
199
- required_rubygems_version: !ruby/object:Gem::Requirement
166
+ hash: -945955899217421684
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
200
168
  none: false
201
- requirements:
202
- - - ">="
203
- - !ruby/object:Gem::Version
204
- hash: 3
205
- segments:
206
- - 0
207
- version: "0"
208
- requirements:
169
+ requirements:
170
+ - - ! '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements:
209
174
  - git, v1.7.4.1 or greater
210
175
  - rvm, v1.8.2 or greater
211
176
  - pythonbrew, v1.1 or greater
212
177
  rubyforge_project:
213
- rubygems_version: 1.6.2
178
+ rubygems_version: 1.8.10
214
179
  signing_key:
215
180
  specification_version: 3
216
181
  summary: Metacontroller for organizing aggregate projects
217
182
  test_files: []
218
-