metacon 0.1.4 → 0.1.5
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.
- data/Rakefile +6 -0
- data/VERSION +1 -1
- data/bin/metacon +3 -2
- data/lib/VERSION +1 -1
- data/lib/metacon/command.rb +17 -7
- data/lib/metacon/init.rb +4 -4
- data/lib/metacon/loaders/rvm.rb +75 -18
- data/lib/metacon/project.rb +14 -7
- data/lib/metacon/stat.rb +5 -5
- data/lib/metacon/switch.rb +7 -4
- data/metacon.gemspec +3 -3
- data/shelp/metacon-installer.sh +12 -7
- data/shelp/metacon.bashrc +6 -3
- metadata +124 -83
data/Rakefile
CHANGED
@@ -49,3 +49,9 @@ task :default => :test
|
|
49
49
|
|
50
50
|
require 'yard'
|
51
51
|
YARD::Rake::YardocTask.new
|
52
|
+
|
53
|
+
desc 'For testing binaries in development'
|
54
|
+
task :local_bin do
|
55
|
+
sh 'rm -f /usr/local/bin/metacon'
|
56
|
+
sh "ln -s #{File.dirname(File.expand_path(__FILE__))}/bin/metacon /usr/local/bin/metacon"
|
57
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/bin/metacon
CHANGED
@@ -5,11 +5,12 @@
|
|
5
5
|
# TODO: Not finding .metacon_unwrapped properly when symlinked! (true-absolute __FILE__ before dirname etc.)
|
6
6
|
# TODO: Make sure full environment is set up- not just rvm installed
|
7
7
|
#
|
8
|
-
|
8
|
+
require 'pathname'
|
9
9
|
rvm_path = File.expand_path("~/.rvm/scripts/rvm")
|
10
10
|
if File.exists?(rvm_path)
|
11
11
|
require 'shellwords'
|
12
|
-
cmd = Shellwords.shellescape(
|
12
|
+
cmd = Shellwords.shellescape(
|
13
|
+
File.join(File.dirname(Pathname.new(__FILE__).realpath.to_s), '.metacon_unwrapped'))
|
13
14
|
full_cmd = '. "$HOME/.rvm/scripts/rvm" && rvm ruby-1.9.2@metacon exec ' + cmd + ' ' + ARGV.map{|a| Shellwords.shellescape(a)}.join(' ')
|
14
15
|
exec full_cmd
|
15
16
|
else
|
data/lib/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/lib/metacon/command.rb
CHANGED
@@ -76,11 +76,15 @@ module MetaCon
|
|
76
76
|
o.version = MetaCon.version
|
77
77
|
o.banner = banner
|
78
78
|
o.separator ''
|
79
|
-
o.on('-
|
79
|
+
o.on('-q', '--[no-]quiet', 'Run command quietly'){|v| options[:verbose]= !v}
|
80
80
|
|
81
81
|
o.on('-h','--help', 'Show this message'){puts o; exit 0}
|
82
82
|
o.on('--version', 'Show version and exit'){puts MetaCon::VERSION; exit 0}
|
83
83
|
|
84
|
+
o.on('-s', '--[no-]shell-output', 'Outputs commands for evaluating in the current shell') do |v|
|
85
|
+
options[:shell]=v
|
86
|
+
end
|
87
|
+
|
84
88
|
o.separator ''
|
85
89
|
o.separator 'commands '
|
86
90
|
o.separator '------------------'
|
@@ -91,30 +95,36 @@ module MetaCon
|
|
91
95
|
o.separator cmds
|
92
96
|
end
|
93
97
|
rest = opts.parse(ARGV)
|
98
|
+
options[:verbose] = true if options[:verbose].nil?
|
99
|
+
options[:shell] = false if options[:shell].nil?
|
94
100
|
|
95
101
|
if rest.size == 0
|
96
|
-
puts
|
102
|
+
puts(opts)
|
97
103
|
exit
|
98
104
|
end
|
105
|
+
|
99
106
|
command_key = rest.shift.strip.downcase
|
100
107
|
command = CMD_ALIASES[command_key.to_sym]
|
101
|
-
|
102
108
|
if command.nil?
|
103
109
|
cfail "Command #{command_key} not found. Use -h to see the list of commands."
|
104
110
|
exit 2
|
105
111
|
end
|
112
|
+
|
106
113
|
$cli = HighLine.new
|
107
114
|
$cli.extend(MetaCon::CLIHelpers)
|
108
115
|
unless command == :init
|
109
|
-
$proj = MetaCon::Project.new
|
110
|
-
|
116
|
+
$proj = MetaCon::Project.new('./', options[:verbose])
|
117
|
+
unless $proj.valid
|
118
|
+
$cli.cfail 'Not a metacon project. Use `metacon init`'
|
119
|
+
exit 5
|
120
|
+
end
|
111
121
|
end
|
112
122
|
|
113
123
|
command_info = COMMANDS.select{|k,v| k == command}[0][1]
|
114
|
-
command_info[:handler].send :handle, command, rest
|
124
|
+
command_info[:handler].send :handle, command, options, rest
|
115
125
|
end
|
116
126
|
|
117
|
-
def self.handle(cmd,opts)
|
127
|
+
def self.handle(cmd,clo,opts)
|
118
128
|
if cmd == :conf
|
119
129
|
conf = $proj.conf
|
120
130
|
conf = Hash[opts.map{|fam| [fam, conf[fam]]}] if opts.size > 0
|
data/lib/metacon/init.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module MetaCon
|
2
2
|
class Init
|
3
3
|
require 'fileutils'
|
4
|
-
def self.handle(_cmd, opts)
|
4
|
+
def self.handle(_cmd, clo, opts)
|
5
5
|
dir = opts.shift
|
6
6
|
dir ||= './'
|
7
7
|
# Find out if different roles are specified. If none- default to primary.
|
@@ -23,8 +23,8 @@ module MetaCon
|
|
23
23
|
end
|
24
24
|
FileUtils.mkdir(mcd)
|
25
25
|
|
26
|
-
$cli.status "Initializing..."
|
27
|
-
mcp = MetaCon::Project.new(mcd)
|
26
|
+
$cli.status "Initializing..." if clo[:verbose]
|
27
|
+
mcp = MetaCon::Project.new(mcd, clo[:verbose])
|
28
28
|
|
29
29
|
init_role = mcp.list(:role)[0] || 'main'
|
30
30
|
init_rtc = mcp.list(:rtc)[0] || 'dev'
|
@@ -33,7 +33,7 @@ module MetaCon
|
|
33
33
|
$cli.cfail 'Cannot initialize the metacontext- submodules need to have files committed.'
|
34
34
|
exit 4
|
35
35
|
end
|
36
|
-
$cli.result "\"#{dir}\" is now a metacon project"
|
36
|
+
$cli.result "\"#{dir}\" is now a metacon project" if clo[:verbose]
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
data/lib/metacon/loaders/rvm.rb
CHANGED
@@ -4,11 +4,11 @@ module MetaCon
|
|
4
4
|
require 'metacon/loaders/helpers'
|
5
5
|
include MetaCon::Loaders::Helpers
|
6
6
|
include MetaCon::CLIHelpers
|
7
|
-
def self.
|
8
|
-
kind =
|
7
|
+
def self.load_dependency(dependency_parts, state, proj, opts)
|
8
|
+
kind = dependency_parts.shift
|
9
9
|
if kind == 'ruby'
|
10
|
-
|
11
|
-
switch_ruby(
|
10
|
+
ruby = fix_ruby_version(dependency_parts)
|
11
|
+
return switch_ruby(ruby, state, opts)
|
12
12
|
elsif kind == 'gem'
|
13
13
|
|
14
14
|
else
|
@@ -16,22 +16,79 @@ module MetaCon
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
|
20
|
+
RVMS = "source $HOME/.rvm/scripts/rvm && "
|
21
|
+
|
22
|
+
def self.switch_ruby(ruby, state, opts={})
|
23
|
+
unless check_installed(ruby,opts)
|
24
|
+
unless install(ruby,opts)
|
25
|
+
cfail "Failed to install ruby '#{ruby}'"
|
26
|
+
return false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
gemset = fix_gemset_name(state)
|
30
|
+
unless check_gemset_installed(gemset, opts)
|
31
|
+
unless create_gemset(ruby, gemset, opts)
|
32
|
+
cfail "Failed to create a gemset '#{gemset}' for '#{ruby}'"
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
return switch(ruby, gemset, opts)
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def self.check_installed(ruby, opts)
|
41
|
+
o,e,s = cmd "#{RVMS} rvm use '#{ruby}'", opts[:verbose]
|
42
|
+
return (s==0 && o =~ /using/i)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.check_gemset_installed(ruby, gemset, opts)
|
46
|
+
o,e,s = cmd "#{RVMS} rvm use '#{ruby}' && rvm gemset use '#{gemset}'", opts[:verbose]
|
47
|
+
return (s == 0 && e.strip.length == 0)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.install(ruby, opts)
|
51
|
+
o,e,s = cmd "#{RVMS} rvm install #{ruby}", opts[:verbose]
|
52
|
+
return (s == 0 && check_installed(ruby,opts))
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.create_gemset(ruby, gemset, opts)
|
56
|
+
o,e,s = cmd "#{RVMS} rvm use '#{ruby}' && rvm gemset create '#{gemset}'", opts[:verbose]
|
57
|
+
res = (o =~ /created/i) && (s == 0) && (e.strip.length == 0)
|
58
|
+
return false unless res
|
59
|
+
# TODO: Make sure any "permanent" prereqs are loaded (possibly
|
60
|
+
# metacon?)
|
61
|
+
return true
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.switch(ruby, gemset, opts)
|
65
|
+
# TODO: if the --shell flag is sent in, essentially do the following:
|
66
|
+
# * Use rvm info to figure out the correct root directory
|
67
|
+
# * Find .rvm/environments/... for the currently selected ruby+gemset
|
68
|
+
# * Compare actual $PATH to what it would need to change to so that we
|
69
|
+
# don't keep prepending to PATH and growing it needlessly on every
|
70
|
+
# switch.
|
71
|
+
# * Create replacement 'export path' stmt
|
72
|
+
# * Take all stmts and concatenate w/ ';' and shell escape where
|
73
|
+
# appropriate (esp. newlines at least)
|
74
|
+
# * Prepend full string w/ 'bash: ' so that it gets evalled in the
|
75
|
+
# current context.
|
76
|
+
# * Enjoy!
|
77
|
+
return true
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
def self.fix_ruby_version(parts)
|
83
|
+
return parts[0].downcase=='head' ? 'ruby-head' : parts.join('-')
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.fix_gemset_name(state)
|
87
|
+
return "mcon_#{clean(state[:rtc])}__#{clean(state[:role])}"
|
30
88
|
end
|
31
89
|
|
32
|
-
def self.
|
33
|
-
|
34
|
-
return st == 0 && err_text.strip.length == 0
|
90
|
+
def self.clean(s)
|
91
|
+
s.gsub /[^a-zA-Z0-9_]+/, '_'
|
35
92
|
end
|
36
93
|
end
|
37
94
|
end
|
data/lib/metacon/project.rb
CHANGED
@@ -17,7 +17,8 @@ module MetaCon
|
|
17
17
|
@uid
|
18
18
|
end
|
19
19
|
|
20
|
-
def initialize(relative_to='./')
|
20
|
+
def initialize(relative_to='./', verbose=true)
|
21
|
+
@verbose = verbose
|
21
22
|
@rel_dir = File.expand_path(relative_to)
|
22
23
|
@mc_dir = Project.find_mc_dir(@rel_dir)
|
23
24
|
if @mc_dir.nil?
|
@@ -45,7 +46,10 @@ module MetaCon
|
|
45
46
|
@this_host
|
46
47
|
end
|
47
48
|
|
48
|
-
|
49
|
+
# Options that it cares about:
|
50
|
+
# - :verbose true/false
|
51
|
+
# - :shell true/false
|
52
|
+
def switch(changes={},opts={})
|
49
53
|
return :nochange if changes=={}
|
50
54
|
return :impossible unless can_switch?
|
51
55
|
changed = false
|
@@ -56,7 +60,7 @@ module MetaCon
|
|
56
60
|
changed = s.dirty
|
57
61
|
end
|
58
62
|
if changed
|
59
|
-
return setup_context(
|
63
|
+
return setup_context(opts)
|
60
64
|
else
|
61
65
|
return :nochange
|
62
66
|
end
|
@@ -93,22 +97,25 @@ module MetaCon
|
|
93
97
|
|
94
98
|
def refresh_conf; @config = Config.new(@root_dir) end
|
95
99
|
|
96
|
-
def setup_context(
|
100
|
+
def setup_context(opts)
|
97
101
|
dependencies = self.conf['dependencies']
|
98
102
|
incomplete = false
|
99
103
|
dependencies.each do |dep|
|
104
|
+
orig_dep = dep.dup
|
100
105
|
dep = dep.split('/').map{|part| part.strip}
|
101
106
|
kind = dep[0].downcase
|
102
107
|
loader = LOADERS[kind]
|
103
108
|
if loader.nil?
|
104
|
-
$stderr.puts "WARNING: Don't know how to work with '#{kind}' dependencies." if verbose
|
109
|
+
$stderr.puts "WARNING: Don't know how to work with '#{kind}' dependencies." if opts[:verbose]
|
105
110
|
incomplete = true
|
106
111
|
else
|
107
|
-
loader.
|
112
|
+
unless loader.load_dependency(dep, @state.state, self, opts)
|
113
|
+
$stderr.puts "ERROR: Failed to load #{orig_dep} - continuing anyway"
|
114
|
+
incomplete = true
|
115
|
+
end
|
108
116
|
end
|
109
117
|
end
|
110
118
|
return incomplete ? :incomplete : :switched
|
111
|
-
# TODO: Handle :incomplete in calling modules
|
112
119
|
end
|
113
120
|
end
|
114
121
|
|
data/lib/metacon/stat.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module MetaCon
|
2
2
|
class Stat
|
3
|
-
def self.handle(cmd, opts)
|
3
|
+
def self.handle(cmd, clo, opts)
|
4
4
|
case cmd
|
5
|
-
when :stat; stat(opts)
|
6
|
-
when :curr; curr(opts)
|
5
|
+
when :stat; stat(opts, clo)
|
6
|
+
when :curr; curr(opts, nil, clo)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.stat(opts)
|
10
|
+
def self.stat(opts, clo)
|
11
11
|
puts '(not yet implemented)'
|
12
12
|
puts curr(opts)
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.curr(opts=[], proj=nil)
|
15
|
+
def self.curr(opts=[], proj=nil, clo)
|
16
16
|
proj ||= $proj
|
17
17
|
$cli.cfail 'Not a metacon project. Use `metacon init`' and exit(5) unless proj.valid
|
18
18
|
state = proj.current_state
|
data/lib/metacon/switch.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module MetaCon
|
2
2
|
class Switch
|
3
|
-
def self.handle(cmd, opts)
|
3
|
+
def self.handle(cmd, clo, opts)
|
4
4
|
if opts.nil? or opts.size == 0
|
5
5
|
all = $proj.list(cmd)
|
6
6
|
current = $proj.current_state[cmd]
|
@@ -12,12 +12,15 @@ module MetaCon
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
else
|
15
|
-
res = $proj.switch(
|
15
|
+
res = $proj.switch({cmd=>opts[0]}, clo)
|
16
16
|
case res
|
17
17
|
when :nochange
|
18
|
-
$cli.cwarn 'Nothing changed'
|
18
|
+
$cli.cwarn 'Nothing changed' if clo[:verbose]
|
19
19
|
when :switched
|
20
|
-
$cli.result "Switched #{cmd} to '#{opts[0]}'"
|
20
|
+
$cli.result "Switched #{cmd} to '#{opts[0]}'" if clo[:verbose]
|
21
|
+
when :incomplete
|
22
|
+
$cli.cwarn "Not all dependencies loaded."
|
23
|
+
$cli.result "Switched #{cmd} to '#{opts[0]}' more or less." if clo[:verbose]
|
21
24
|
when :impossible
|
22
25
|
$cli.cfail 'Cannot switch. Probably because submodules need committing.'
|
23
26
|
end
|
data/metacon.gemspec
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "metacon"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.5"
|
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 = "2011-10-
|
12
|
+
s.date = "2011-10-21"
|
13
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
14
|
s.email = "jwecker@justin.tv"
|
15
|
-
s.executables = [".metacon_unwrapped", "metacon", "metacon
|
15
|
+
s.executables = [".metacon_unwrapped", "metacon-installer", "metacon"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE.txt",
|
18
18
|
"README.rdoc"
|
data/shelp/metacon-installer.sh
CHANGED
@@ -30,20 +30,25 @@ fi
|
|
30
30
|
|
31
31
|
source "$HOME/.rvm/scripts/rvm"
|
32
32
|
set +e
|
33
|
-
rvm use $MCON_RUBY_V || ( rvm install $MCON_RUBY_V && rvm use $MCON_RUBY_V ) || exit 3
|
34
|
-
|
35
|
-
rvm gemset use metacon
|
33
|
+
[[ `rvm use $MCON_RUBY_V` == *Using* ]] || ( rvm install $MCON_RUBY_V && rvm use $MCON_RUBY_V ) || exit 3
|
34
|
+
rvm use $MCON_RUBY_V
|
35
|
+
[[ `rvm use $MCON_RUBY_V; rvm gemset use metacon 2>&1` == *ERROR* ]] && ( ( rvm use $MCON_RUBY_V && rvm gemset create metacon && rvm gemset use metacon ) || exit 3 )
|
36
|
+
rvm gemset use metacon
|
37
|
+
rvm current
|
36
38
|
rvm --force gemset empty metacon || exit 3
|
37
|
-
echo `rvm current`
|
38
39
|
|
39
40
|
set -e
|
40
41
|
GEMOUT=`mktemp /tmp/metacon.XXXXXX`
|
41
|
-
gem install metacon | tee $GEMOUT
|
42
|
+
gem install metacon | grep -v metacon-installer | grep -v "^$" | tee $GEMOUT
|
42
43
|
DIRNAME=`grep 'Successfully installed metacon-' $GEMOUT | cut -d' ' -f3`
|
43
44
|
unlink $GEMOUT
|
45
|
+
TMPGEMDIR=`rvm gemdir`
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
+
set +e
|
48
|
+
rm -f /usr/local/bin/metacon &> /dev/null || sudo rm -f /usr/local/bin/metacon
|
49
|
+
ln -s ${TMPGEMDIR}/gems/${DIRNAME}/bin/metacon /usr/local/bin/metacon &> /dev/null || \
|
50
|
+
sudo ln -s ${TMPGEMDIR}/gems/${DIRNAME}/bin/metacon /usr/local/bin/metacon
|
51
|
+
set -e
|
47
52
|
|
48
53
|
if [ $INSTALLED_RVM ]; then
|
49
54
|
echo "To finish installing RVM you need to add the following to your .bashrc (or .bash_profile etc.) - then restart the shell."
|
data/shelp/metacon.bashrc
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
|
-
#
|
3
|
-
# used.
|
2
|
+
# TODO: make sure not to show role in prompt if no role differentiation is used.
|
4
3
|
|
5
|
-
|
4
|
+
mcon(){
|
5
|
+
# Essentially just let metacon do its thing but then do in the current
|
6
|
+
# context anything it tells us to do (such as setting environment variables)
|
7
|
+
eval `metacon -s $@ | grep '^:bash' | cut -d' ' -f2-`
|
8
|
+
}
|
metadata
CHANGED
@@ -1,106 +1,142 @@
|
|
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
|
+
hash: 17
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 5
|
10
|
+
version: 0.1.5
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Joseph Wecker
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
|
18
|
+
date: 2011-10-21 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
17
22
|
none: false
|
18
|
-
requirements:
|
23
|
+
requirements:
|
19
24
|
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
hash: 51
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 11
|
30
|
+
- 0
|
21
31
|
version: 0.11.0
|
22
|
-
|
32
|
+
name: god
|
23
33
|
prerelease: false
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
34
|
+
type: :runtime
|
35
|
+
requirement: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
28
38
|
none: false
|
29
|
-
requirements:
|
39
|
+
requirements:
|
30
40
|
- - ~>
|
31
|
-
- !ruby/object:Gem::Version
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 11
|
43
|
+
segments:
|
44
|
+
- 1
|
45
|
+
- 6
|
46
|
+
- 2
|
32
47
|
version: 1.6.2
|
33
|
-
|
48
|
+
name: highline
|
34
49
|
prerelease: false
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
50
|
+
type: :runtime
|
51
|
+
requirement: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
39
54
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
name: minitest
|
45
63
|
prerelease: false
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
64
|
+
type: :development
|
65
|
+
requirement: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
50
68
|
none: false
|
51
|
-
requirements:
|
69
|
+
requirements:
|
52
70
|
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 7
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
- 6
|
76
|
+
- 0
|
54
77
|
version: 0.6.0
|
55
|
-
|
78
|
+
name: yard
|
56
79
|
prerelease: false
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
80
|
+
type: :development
|
81
|
+
requirement: *id004
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
61
84
|
none: false
|
62
|
-
requirements:
|
85
|
+
requirements:
|
63
86
|
- - ~>
|
64
|
-
- !ruby/object:Gem::Version
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 23
|
89
|
+
segments:
|
90
|
+
- 1
|
91
|
+
- 0
|
92
|
+
- 0
|
65
93
|
version: 1.0.0
|
66
|
-
|
94
|
+
name: bundler
|
67
95
|
prerelease: false
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
96
|
+
type: :development
|
97
|
+
requirement: *id005
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
72
100
|
none: false
|
73
|
-
requirements:
|
101
|
+
requirements:
|
74
102
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
hash: 7
|
105
|
+
segments:
|
106
|
+
- 1
|
107
|
+
- 6
|
108
|
+
- 4
|
76
109
|
version: 1.6.4
|
77
|
-
|
110
|
+
name: jeweler
|
78
111
|
prerelease: false
|
79
|
-
version_requirements: *2153244040
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: rcov
|
82
|
-
requirement: &2153243560 !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
|
-
requirements:
|
85
|
-
- - ! '>='
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '0'
|
88
112
|
type: :development
|
113
|
+
requirement: *id006
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
hash: 3
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
version: "0"
|
124
|
+
name: rcov
|
89
125
|
prerelease: false
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
/ twitch.tv project clusters.
|
126
|
+
type: :development
|
127
|
+
requirement: *id007
|
128
|
+
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.
|
94
129
|
email: jwecker@justin.tv
|
95
|
-
executables:
|
130
|
+
executables:
|
96
131
|
- .metacon_unwrapped
|
97
|
-
- metacon
|
98
132
|
- metacon-installer
|
133
|
+
- metacon
|
99
134
|
extensions: []
|
100
|
-
|
135
|
+
|
136
|
+
extra_rdoc_files:
|
101
137
|
- LICENSE.txt
|
102
138
|
- README.rdoc
|
103
|
-
files:
|
139
|
+
files:
|
104
140
|
- .attic/metacon-install
|
105
141
|
- .attic/old/.cmd_common
|
106
142
|
- .attic/old/Gemfile
|
@@ -148,29 +184,33 @@ files:
|
|
148
184
|
- test/helper.rb
|
149
185
|
- test/test_metacon.rb
|
150
186
|
homepage: http://github.com/josephwecker/metacon
|
151
|
-
licenses:
|
187
|
+
licenses:
|
152
188
|
- MIT
|
153
|
-
post_install_message:
|
154
|
-
to check dependencies & finish the installation --- \e[0m\n\n"
|
189
|
+
post_install_message: "\n\n\
|
190
|
+
\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"
|
155
191
|
rdoc_options: []
|
156
|
-
|
192
|
+
|
193
|
+
require_paths:
|
157
194
|
- lib
|
158
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
195
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
196
|
none: false
|
160
|
-
requirements:
|
161
|
-
- -
|
162
|
-
- !ruby/object:Gem::Version
|
163
|
-
|
164
|
-
segments:
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
hash: 3
|
201
|
+
segments:
|
165
202
|
- 0
|
166
|
-
|
167
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
+
version: "0"
|
204
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
205
|
none: false
|
169
|
-
requirements:
|
170
|
-
- -
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
|
173
|
-
|
206
|
+
requirements:
|
207
|
+
- - ">="
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
hash: 3
|
210
|
+
segments:
|
211
|
+
- 0
|
212
|
+
version: "0"
|
213
|
+
requirements:
|
174
214
|
- git, v1.7.4.1 or greater
|
175
215
|
- rvm, v1.8.2 or greater
|
176
216
|
- pythonbrew, v1.1 or greater
|
@@ -180,3 +220,4 @@ signing_key:
|
|
180
220
|
specification_version: 3
|
181
221
|
summary: Metacontroller for organizing aggregate projects
|
182
222
|
test_files: []
|
223
|
+
|