metacon 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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
-