console-mux 2.0.7 → 2.0.8
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.
- checksums.yaml +7 -0
- data/VERSION +1 -1
- data/lib/console/mux.rb +9 -2
- data/lib/console/mux/command_set.rb +7 -8
- data/lib/console/mux/console.rb +13 -37
- data/lib/console/mux/process.rb +6 -10
- metadata +15 -33
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 52f90b608b800c986fb3eba38f8977584a590f9a
|
4
|
+
data.tar.gz: 35f9a160bb52d9407535e5e53978fd5c31ebad0e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e06a46cf0cf7e3c62cee109a95167f7c63c4e0b6068e755ad11ab396d6a6d721c62ae0084f242770618741aeddbe35eecbaaa95ae0ead7221c44118f5a800daa
|
7
|
+
data.tar.gz: 5737dfaa9893cac325ed3e67f6acb22c05c89600deaa705130473e4b8d14b2c1f9773f656725b1c1bc1fc06b50d6024f4448aef90ecae3db8c0928f7dbfae443
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.8
|
data/lib/console/mux.rb
CHANGED
@@ -39,7 +39,7 @@ module Console
|
|
39
39
|
:init_file => nil
|
40
40
|
}
|
41
41
|
|
42
|
-
OptionParser.new do |opts|
|
42
|
+
oparser = OptionParser.new do |opts|
|
43
43
|
opts.banner = "Usage: console-mux <init_file>"
|
44
44
|
opts.on_tail('-h', '--help', 'Show this message') do
|
45
45
|
puts opts
|
@@ -52,7 +52,14 @@ module Console
|
|
52
52
|
puts VERSION
|
53
53
|
exit
|
54
54
|
end
|
55
|
-
end
|
55
|
+
end
|
56
|
+
oparser.parse!(args)
|
57
|
+
|
58
|
+
options[:init_file] ||= args.shift
|
59
|
+
unless options[:init_file]
|
60
|
+
$stderr.puts oparser
|
61
|
+
exit 1
|
62
|
+
end
|
56
63
|
|
57
64
|
begin
|
58
65
|
run(options)
|
@@ -31,16 +31,15 @@ module Console
|
|
31
31
|
# waits for an +:exit+ event from each.
|
32
32
|
#
|
33
33
|
# @param [Array<Process>] processes
|
34
|
-
def join(processes)
|
35
|
-
|
34
|
+
def join(processes, &block)
|
35
|
+
q = EventMachine::Queue.new
|
36
|
+
|
36
37
|
processes.each do |proc|
|
37
|
-
proc.on(:exit)
|
38
|
-
pending_exit -= 1
|
39
|
-
if pending_exit == 0 && block_given?
|
40
|
-
yield
|
41
|
-
end
|
42
|
-
end
|
38
|
+
proc.on(:exit) { q.push :exit }
|
43
39
|
end
|
40
|
+
|
41
|
+
(processes.size - 1).times { q.pop {} }
|
42
|
+
q.pop { block.call } # all have exited
|
44
43
|
end
|
45
44
|
end
|
46
45
|
|
data/lib/console/mux/console.rb
CHANGED
@@ -92,33 +92,6 @@ module Console
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
-
def run_commands()
|
96
|
-
next_command = commands.command_q.shift
|
97
|
-
if (!next_command.nil?)
|
98
|
-
commands.startCommand( next_command )
|
99
|
-
|
100
|
-
# if next_command.opts[:blocking]
|
101
|
-
# EventMachine.next_tick do
|
102
|
-
# check_command(next_command)
|
103
|
-
# end
|
104
|
-
# else
|
105
|
-
# end
|
106
|
-
|
107
|
-
if (!(commands.command_q.empty?))
|
108
|
-
EventMachine.next_tick do
|
109
|
-
run_commands()
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
# EM::Iterator requires the beta version of eventmachine
|
115
|
-
# EM::Iterator.new(commands.command_q).each do |command,iter|
|
116
|
-
# commands.start( commands.command_q.shift )
|
117
|
-
# iter.next
|
118
|
-
# end
|
119
|
-
end
|
120
|
-
|
121
|
-
|
122
95
|
# Using set_ rather than '=' style accessor so config file needn't
|
123
96
|
# use self.default_options =.
|
124
97
|
def set_default_options(opts)
|
@@ -250,19 +223,22 @@ module Console
|
|
250
223
|
end
|
251
224
|
|
252
225
|
def shutdown
|
253
|
-
|
226
|
+
timer = EventMachine.add_timer(30) do
|
227
|
+
logger.error { "could not halt all processes; giving up :(" }
|
254
228
|
EventMachine.stop_event_loop
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
end
|
229
|
+
end
|
230
|
+
|
231
|
+
commands.on(:stopped) do
|
232
|
+
EventMachine.cancel_timer(timer)
|
260
233
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
234
|
+
# If not wrapped in next_tick, EventMachine doesn't exit
|
235
|
+
# immediately (bug?)
|
236
|
+
EventMachine.next_tick { EventMachine.stop_event_loop }
|
237
|
+
end
|
265
238
|
|
239
|
+
if commands.stopped?
|
240
|
+
EventMachine.stop_event_loop
|
241
|
+
else
|
266
242
|
commands.stop_all
|
267
243
|
end
|
268
244
|
end
|
data/lib/console/mux/process.rb
CHANGED
@@ -64,9 +64,6 @@ module Console
|
|
64
64
|
|
65
65
|
# Called by the child handler
|
66
66
|
def unbind
|
67
|
-
@stdin.close rescue nil
|
68
|
-
@stdout.close rescue nil
|
69
|
-
|
70
67
|
pid2, status = ::Process.waitpid2(pid, ::Process::WNOHANG)
|
71
68
|
if pid2
|
72
69
|
on_exit(status)
|
@@ -135,22 +132,18 @@ module Console
|
|
135
132
|
|
136
133
|
@started_at = Time.now
|
137
134
|
|
138
|
-
stdin, stdout, pid = Dir.chdir
|
135
|
+
@stdin, @stdout, @pid = Dir.chdir(command.dir) do
|
139
136
|
with_clean_env(command.env) do
|
140
137
|
PTY.spawn(command.commandline)
|
141
138
|
end
|
142
139
|
end
|
143
|
-
|
144
|
-
@stdin = stdin
|
145
|
-
@stdout = stdout
|
146
|
-
@pid = pid
|
147
140
|
|
148
141
|
logger.info { "in #{File.expand_path(command.dir)}" }
|
149
142
|
logger.info { "with #{command.env.to_a.map{|k,v| "#{k}=#{v}"}.join(' ')}" }
|
150
143
|
logger.info { command }
|
151
144
|
logger.info { "started process #{pid}" }
|
152
145
|
|
153
|
-
@handler = EventMachine.attach(stdout, PTYHandler, self)
|
146
|
+
@handler = EventMachine.attach(@stdout, PTYHandler, self)
|
154
147
|
end
|
155
148
|
|
156
149
|
def try_kill(signals)
|
@@ -197,10 +190,13 @@ module Console
|
|
197
190
|
logger.warn { "process #{pid} exited #{status.inspect}" }
|
198
191
|
end
|
199
192
|
ensure
|
193
|
+
@stdin.close rescue nil
|
194
|
+
@stdout.close rescue nil
|
195
|
+
|
200
196
|
@handler = nil
|
201
197
|
fire(:exit)
|
202
198
|
end
|
203
199
|
end
|
204
200
|
end
|
205
201
|
end
|
206
|
-
end
|
202
|
+
end
|
metadata
CHANGED
@@ -1,52 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console-mux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
-
|
7
|
+
- Patrick Mahoney
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-07-28 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: eventmachine
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: log4r
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: ripl-readline-em
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,23 +55,20 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: version
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,14 +76,13 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ~>
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '1'
|
94
83
|
description: Multiplex several commands on one console
|
95
84
|
email:
|
96
|
-
-
|
85
|
+
- pat@polycrystal.org
|
97
86
|
executables:
|
98
87
|
- console-mux
|
99
88
|
extensions: []
|
@@ -120,32 +109,25 @@ files:
|
|
120
109
|
- bin/console-mux
|
121
110
|
homepage:
|
122
111
|
licenses: []
|
112
|
+
metadata: {}
|
123
113
|
post_install_message:
|
124
114
|
rdoc_options: []
|
125
115
|
require_paths:
|
126
116
|
- lib
|
127
117
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
-
none: false
|
129
118
|
requirements:
|
130
|
-
- -
|
119
|
+
- - '>='
|
131
120
|
- !ruby/object:Gem::Version
|
132
121
|
version: '0'
|
133
|
-
segments:
|
134
|
-
- 0
|
135
|
-
hash: -1031871365713465132
|
136
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
123
|
requirements:
|
139
|
-
- -
|
124
|
+
- - '>='
|
140
125
|
- !ruby/object:Gem::Version
|
141
126
|
version: '0'
|
142
|
-
segments:
|
143
|
-
- 0
|
144
|
-
hash: -1031871365713465132
|
145
127
|
requirements: []
|
146
128
|
rubyforge_project:
|
147
|
-
rubygems_version:
|
129
|
+
rubygems_version: 2.0.3
|
148
130
|
signing_key:
|
149
|
-
specification_version:
|
131
|
+
specification_version: 4
|
150
132
|
summary: Multiplex several commands on one console
|
151
133
|
test_files: []
|