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.
- 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
|
-
|