metacon 0.1.6 → 0.2.0
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/VERSION +1 -1
- data/lib/VERSION +1 -1
- data/lib/metacon/command.rb +1 -1
- data/lib/metacon/loaders/helpers.rb +2 -1
- data/lib/metacon/loaders/rvm.rb +46 -7
- data/lib/metacon/stat.rb +1 -1
- data/lib/metacon/switch.rb +1 -1
- data/metacon.gemspec +1 -1
- data/shelp/metacon.bashrc +4 -1
- metadata +16 -16
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/metacon/command.rb
CHANGED
@@ -95,8 +95,8 @@ module MetaCon
|
|
95
95
|
o.separator cmds
|
96
96
|
end
|
97
97
|
rest = opts.parse(ARGV)
|
98
|
-
options[:verbose] = true if options[:verbose].nil?
|
99
98
|
options[:shell] = false if options[:shell].nil?
|
99
|
+
options[:verbose] = true if options[:verbose].nil?
|
100
100
|
|
101
101
|
if rest.size == 0
|
102
102
|
puts(opts)
|
@@ -2,11 +2,12 @@ module MetaCon
|
|
2
2
|
module Loaders
|
3
3
|
module Helpers
|
4
4
|
def included(by); by.extend(self) end
|
5
|
-
def
|
5
|
+
def shcmd(cmd_string, echo=true)
|
6
6
|
require 'open3'
|
7
7
|
main_out = ''
|
8
8
|
err_out = ''
|
9
9
|
exit_status = 1
|
10
|
+
$stout.puts(cmd_string) if echo
|
10
11
|
Open3.popen3('/usr/bin/env bash -s') do |stdin, stdout, stderr, wth|
|
11
12
|
stdin.puts cmd_string
|
12
13
|
stdin.flush
|
data/lib/metacon/loaders/rvm.rb
CHANGED
@@ -18,8 +18,11 @@ module MetaCon
|
|
18
18
|
|
19
19
|
|
20
20
|
RVMS = "source $HOME/.rvm/scripts/rvm && "
|
21
|
+
def self.shc(cmdstr,v); return shcmd("#{RVMS} #{cmdstr}", v) end
|
21
22
|
|
22
23
|
def self.switch_ruby(ruby, state, opts={})
|
24
|
+
# TODO: shortcircuit all of this by trying to construct the environment path
|
25
|
+
# and look there first - then do all of this if it doesn't exist.
|
23
26
|
unless check_installed(ruby,opts)
|
24
27
|
unless install(ruby,opts)
|
25
28
|
cfail "Failed to install ruby '#{ruby}'"
|
@@ -27,7 +30,7 @@ module MetaCon
|
|
27
30
|
end
|
28
31
|
end
|
29
32
|
gemset = fix_gemset_name(state)
|
30
|
-
unless check_gemset_installed(gemset, opts)
|
33
|
+
unless check_gemset_installed(ruby, gemset, opts)
|
31
34
|
unless create_gemset(ruby, gemset, opts)
|
32
35
|
cfail "Failed to create a gemset '#{gemset}' for '#{ruby}'"
|
33
36
|
return false
|
@@ -38,27 +41,27 @@ module MetaCon
|
|
38
41
|
|
39
42
|
|
40
43
|
def self.check_installed(ruby, opts)
|
41
|
-
o,e,s =
|
44
|
+
o,e,s = shc("rvm use '#{ruby}@'", false)
|
42
45
|
return (s==0 && o =~ /using/i)
|
43
46
|
end
|
44
47
|
|
45
48
|
def self.check_gemset_installed(ruby, gemset, opts)
|
46
|
-
o,e,s =
|
49
|
+
o,e,s = shc("rvm use '#{ruby}'@'#{gemset}'", false)
|
47
50
|
return (s == 0 && e.strip.length == 0)
|
48
51
|
end
|
49
52
|
|
50
53
|
def self.install(ruby, opts)
|
51
|
-
o,e,s =
|
54
|
+
o,e,s = shc("rvm install #{ruby}", opts[:verbose])
|
52
55
|
return (s == 0 && check_installed(ruby,opts))
|
53
56
|
end
|
54
57
|
|
55
58
|
def self.create_gemset(ruby, gemset, opts)
|
56
|
-
o,e,s =
|
59
|
+
o,e,s = shc("rvm use '#{ruby}' && rvm gemset create '#{gemset}'", opts[:verbose])
|
57
60
|
res = (o =~ /created/i) && (s == 0) && (e.strip.length == 0)
|
58
|
-
return
|
61
|
+
return res
|
62
|
+
#return false unless res
|
59
63
|
# TODO: Make sure any "permanent" prereqs are loaded (possibly
|
60
64
|
# metacon?)
|
61
|
-
return true
|
62
65
|
end
|
63
66
|
|
64
67
|
def self.switch(ruby, gemset, opts)
|
@@ -74,11 +77,47 @@ module MetaCon
|
|
74
77
|
# * Prepend full string w/ 'bash: ' so that it gets evalled in the
|
75
78
|
# current context.
|
76
79
|
# * Enjoy!
|
80
|
+
identstr = `#{RVMS} rvm '#{ruby}'@'#{gemset}' do rvm tools identifier`
|
81
|
+
envsettings = "~/.rvm/environments/#{identstr}"
|
82
|
+
cmds = process_env_commands(IO.readlines(File.expand_path(envsettings)))
|
83
|
+
puts cmds.join("\n") if opts[:shell]
|
77
84
|
return true
|
78
85
|
end
|
79
86
|
|
80
87
|
protected
|
81
88
|
|
89
|
+
def self.process_env_commands(cmdlines,and_exec=true)
|
90
|
+
res = []
|
91
|
+
cmdlines.each do |cl|
|
92
|
+
if cl =~ /^\s*export\s+PATH="([^"]+)"/
|
93
|
+
res << process_path_mod($1.split(':'),and_exec)
|
94
|
+
elsif cl =~ /^\s*unset /
|
95
|
+
res << ":bash #{cl.strip}"
|
96
|
+
ENV.delete(cl.split(/\s+/)[1..-1].join(' ')) if and_exec
|
97
|
+
elsif cl =~ /export /
|
98
|
+
if and_exec
|
99
|
+
val = cl.split("'")[1]
|
100
|
+
name = cl.split('=')[0].strip
|
101
|
+
ENV[name] = val
|
102
|
+
end
|
103
|
+
res << ":bash #{cl.strip}"
|
104
|
+
else
|
105
|
+
raise "Don't know what to do with the environment command: #{cl}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
return res
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.process_path_mod(parts, and_exec)
|
112
|
+
require 'shellwords'
|
113
|
+
currpath = ENV['PATH'].split(':')
|
114
|
+
parts.delete('$PATH')
|
115
|
+
currpath.select!{|v| v !~ /\/\.rvm\//}
|
116
|
+
rewritten = (parts + currpath).join(':')
|
117
|
+
ENV['PATH'] = rewritten if and_exec
|
118
|
+
return ":bash export PATH=\"#{Shellwords.shellescape(rewritten)}\""
|
119
|
+
end
|
120
|
+
|
82
121
|
def self.fix_ruby_version(parts)
|
83
122
|
return parts[0].downcase=='head' ? 'ruby-head' : parts.join('-')
|
84
123
|
end
|
data/lib/metacon/stat.rb
CHANGED
data/lib/metacon/switch.rb
CHANGED
data/metacon.gemspec
CHANGED
data/shelp/metacon.bashrc
CHANGED
@@ -4,5 +4,8 @@
|
|
4
4
|
mcon(){
|
5
5
|
# Essentially just let metacon do its thing but then do in the current
|
6
6
|
# context anything it tells us to do (such as setting environment variables)
|
7
|
-
|
7
|
+
tmpout=`mktemp /tmp/mc.XXXXXXXX`
|
8
|
+
metacon -s $@ | tee $tmpout | grep -v '^:bash' # Run & display results
|
9
|
+
eval `grep '^:bash' $tmpout | cut -d' ' -f2-` # Process any bash commands
|
10
|
+
unlink $tmpout
|
8
11
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metacon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-21 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: god
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153799620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.11.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153799620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: highline
|
27
|
-
requirement: &
|
27
|
+
requirement: &2153799140 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.6.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2153799140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest
|
38
|
-
requirement: &
|
38
|
+
requirement: &2153798660 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2153798660
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: yard
|
49
|
-
requirement: &
|
49
|
+
requirement: &2153798180 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.6.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2153798180
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &2153797700 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2153797700
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jeweler
|
71
|
-
requirement: &
|
71
|
+
requirement: &2153797220 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.6.4
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2153797220
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rcov
|
82
|
-
requirement: &
|
82
|
+
requirement: &2153796740 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2153796740
|
91
91
|
description: Tool with some similarities to puppet but specializing in fast development
|
92
92
|
iteration and continuous deployment. Specifically initially for use with justin.tv
|
93
93
|
/ twitch.tv project clusters.
|
@@ -163,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
163
|
version: '0'
|
164
164
|
segments:
|
165
165
|
- 0
|
166
|
-
hash:
|
166
|
+
hash: -1965683250657076444
|
167
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
168
|
none: false
|
169
169
|
requirements:
|