metacon 0.1.0 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/{bin → .attic}/metacon-install +0 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/.metacon_unwrapped +9 -0
- data/bin/metacon +11 -7
- data/bin/metacon-installer +4 -0
- data/lib/VERSION +1 -1
- data/lib/metacon/command.rb +4 -0
- data/lib/metacon/init.rb +1 -1
- data/lib/metacon/loaders/helpers.rb +42 -0
- data/lib/metacon/loaders/index.rb +29 -0
- data/lib/metacon/loaders/rvm.rb +37 -0
- data/lib/metacon/project.rb +54 -36
- data/lib/metacon/switch.rb +1 -1
- data/metacon.gemspec +17 -15
- data/shelp/metacon-installer.sh +51 -0
- metadata +92 -128
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---
|
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.
|
1
|
+
0.1.3
|
data/bin/metacon
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
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
|
-
|
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
|
data/lib/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/metacon/command.rb
CHANGED
data/lib/metacon/init.rb
CHANGED
@@ -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
|
data/lib/metacon/project.rb
CHANGED
@@ -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
|
-
|
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
|
41
|
-
@
|
42
|
-
|
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
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
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
|
-
|
147
|
-
|
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
|
data/lib/metacon/switch.rb
CHANGED
data/metacon.gemspec
CHANGED
@@ -4,20 +4,21 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.1.
|
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 =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
15
|
-
s.executables = ["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-
|
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 =
|
68
|
+
s.homepage = "http://github.com/josephwecker/metacon"
|
63
69
|
s.licenses = ["MIT"]
|
64
|
-
s.post_install_message =
|
65
|
-
|
66
|
-
[1;32m[40m--- Please run [1;37mmetacon-install[1;32m to check dependencies & finish the installation --- [0m
|
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 =
|
72
|
-
s.summary =
|
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
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
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
|
-
|
51
|
-
version_requirements: *id002
|
33
|
+
type: :runtime
|
52
34
|
prerelease: false
|
53
|
-
|
54
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
118
|
-
|
119
|
-
|
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
|
-
|
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
|
-
|
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
|
-
-
|
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-
|
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
|
-
|
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
|
-
|
196
|
-
segments:
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
segments:
|
197
165
|
- 0
|
198
|
-
|
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
|
-
|
205
|
-
|
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.
|
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
|
-
|